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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot]


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

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