Текущее время: Сб, июл 19 2025, 09:21

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Выборка данных
СообщениеДобавлено: Ср, июл 17 2013, 11:01 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 26 2013, 13:45
Сообщения: 46
Добрый день. Нужна помощь.

В SAP есть стандартная таблица с данными KEKO.
Мне надо выбрать поля KADKY (ДАТА). При условии что KADKY (ДАТА) равно полю которое я ввожу с селекционного экрана, если KADKY (ДАТА) равно PA_PER то записать в таблиц IT_OUT и если KADKY (ДАТА) не равно PA_PER то взять ближайшую дату находящуюся к дате которую я ввожу с экрана и записать в таблиц IT_OUT
И дата в таблице должна быть меньше даты которая вводится с экрана
select
zp~matnr
zp~kadky
zp~werks
zp~hwaer
zp~poper
zp~kalnr
zs~elemt
zm~maktx
zk~txele
from keko as zp
inner join TCKH3 as zs on zs~elehk = zp~elehk
inner join TCKH1 as zk on zk~elemt = zs~elemt
inner join MAKT as zm on zm~matnr = zp~matnr
into CORRESPONDING FIELDS OF TABLE it_out
where
zp~werks = pa_werks
and
zp~matnr in pa_matnr
and
zp~kadky = PA_PER.


Последний раз редактировалось Knedlik Ср, июл 17 2013, 12:09, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных
СообщениеДобавлено: Ср, июл 17 2013, 11:42 
Ассистент
Ассистент

Зарегистрирован:
Ср, май 22 2013, 11:44
Сообщения: 41
Скорее всего в одном запросе не получится.

Надо будет делать двумя.

Code:
SELECT
zp~matnr
zp~kadky
zp~werks
zp~hwaer
zp~poper
zp~kalnr
zs~elemt
zm~maktx
zk~txele
FROM keko AS zp
INNER JOIN tckh3 AS zs ON zs~elehk = zp~elehk
INNER JOIN tckh1 AS zk ON zk~elemt = zs~elemt
INNER JOIN makt AS zm ON zm~matnr = zp~matnr
INTO CORRESPONDING FIELDS OF TABLE it_out_max
WHERE
zp~werks = pa_werks
AND
zp~matnr IN pa_matnr
AND
zp~kadky = ( SELECT MAX( kadky ) FROM keko AS zp_1
               INNER JOIN tckh3 AS zs_1 ON zs_1~elehk = zp_1~elehk
               INNER JOIN tckh1 AS zk_1 ON zk_1~elemt = zs_1~elemt
               INNER JOIN makt AS zm_1 ON zm_1~matnr = zp_1~matnr
               WHERE zp_1~werks = zp~werks
                     AND zp_1~matnr = zp~matnr
                     AND zp_1~kadky <= pa_per ).


И

Code:
SELECT
zp~matnr
zp~kadky
zp~werks
zp~hwaer
zp~poper
zp~kalnr
zs~elemt
zm~maktx
zk~txele
FROM keko AS zp
INNER JOIN tckh3 AS zs ON zs~elehk = zp~elehk
INNER JOIN tckh1 AS zk ON zk~elemt = zs~elemt
INNER JOIN makt AS zm ON zm~matnr = zp~matnr
INTO CORRESPONDING FIELDS OF TABLE it_out_min
WHERE
zp~werks = pa_werks
AND
zp~matnr IN pa_matnr
AND
zp~kadky = ( SELECT MIN( kadky ) FROM keko AS zp_1
               INNER JOIN tckh3 AS zs_1 ON zs_1~elehk = zp_1~elehk
               INNER JOIN tckh1 AS zk_1 ON zk_1~elemt = zs_1~elemt
               INNER JOIN makt AS zm_1 ON zm_1~matnr = zp_1~matnr
               WHERE zp_1~werks = zp~werks
                     AND zp_1~matnr = zp~matnr
                     AND zp_1~kadky > pa_per ).


Сначала ищем в it_out_max, затем it_out_min. В случае нахождения в обоих таблицах интересующей записи, определять кто же всё таки ближе.

Но надеюсь я ошибаюсь и всё гораздо проще :)


Последний раз редактировалось D.Krokhun Ср, июл 17 2013, 13:57, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных
СообщениеДобавлено: Ср, июл 17 2013, 12:08 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 26 2013, 13:45
Сообщения: 46
Получается что следующая ситуация. Есть таблица с данными
KALNR KADKY
100000608 01.01.2012
100000608 01.02.2013
100000608 01.06.2013
100000608 01.07.2013

На селекционном экране я ввожу дату 01.05.2013
И получается что после отработки первого SELECT получим запись

KALNR KADKY
100000608 01.02.2013

А после вторго
KALNR KADKY
100000608 01.07.2013

Спасибо сработало. Обошелся первым селектом, второй не пригодился.
Только вот если дата с таблицы равна дате с экрана для одного материала, а для другого не равна и программа взяла максимальную дату, то в итоге в таблицу попадет либо значение равное дате с экрана, либо меньше задангой даты. А вместе никак не попадают (((

Т.е. должно быть две записи, а записывается только одна


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных
СообщениеДобавлено: Ср, июл 17 2013, 13:54 
Ассистент
Ассистент

Зарегистрирован:
Ср, май 22 2013, 11:44
Сообщения: 41
Вообще-то идея другая была =)

После отработки второго запроса должна прийти запись '100000608 01.06.2013'

Просто может же быть ситцауия
    KALNR KADKY
    100000608 01.01.2012
    100000608 01.02.2013
    100000608 15.05.2013
    100000608 01.07.2013

И тогда 100000608 15.05.2013 будет ближайшей датой, она-то и выберется второым запросом.

А насчёт вместе не попадают это я скорее всего подзапрос неправильно составил, сейчас посмотрю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных  Тема решена
СообщениеДобавлено: Ср, июл 17 2013, 13:58 
Ассистент
Ассистент

Зарегистрирован:
Ср, май 22 2013, 11:44
Сообщения: 41
Подправил запросы.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных
СообщениеДобавлено: Ср, июл 17 2013, 14:05 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 26 2013, 13:45
Сообщения: 46
D.Krokhun СПАСИБО за помощь, сработало )))


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB