Текущее время: Пн, июл 28 2025, 02:36

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Помогите связать 2 селекта
СообщениеДобавлено: Вт, янв 13 2009, 22:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, май 11 2007, 20:07
Сообщения: 138
Пол: Женский
Коллеги, помогите консультанту связать 2 селекта!
Необходимо отобрать список материалов однолитровой продукции, имеющих действующие варанты изготовления, и прнадлежащим заводу, указанному на экране выбора как параметр P_Plant.

Я написала 2 селекта. Первый вроде ничего, а во втором не знаю как привязаться к первому.

Испольуем 2 таблицы:
• MKAL – Production Versions of Material
• MARA – General Material Data

1.Query from table MKAL:

Select MATNR from MKAL
where MKAL-WERKS=P_Plant
and MKAL-BDATU>P_Date
and MKAL-ADATU<P_Date
and MKAL-MKSP=’’
and MKAL-MDV01=’PP-BOTL*’

2.Query from table MARA:

Select MAKTX from MARA
where MARA-MATNR=the results of previous select query (Query from table MKAL)
and MARA-MATNR=’*1*L*’


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Вт, янв 13 2009, 23:06 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, янв 07 2008, 20:51
Сообщения: 156
Пол: Мужской
Извините, неохота после трудового дня еще вьезжать в ваш код, но приведу пример со своей проги, думаю разберетесь :)

Code:
*до этого******** SELECT-OPTIONS: so_matnr for mara-matnr. " кажись так

DATA: gt_matnr LIKE mara OCCURS 100 WITH HEADER LINE.


START-OF-SELECTION.

   SELECT * APPENDING TABLE gt_matnr FROM mara
     WHERE matnr IN so_matnr AND mtart = 'ROH'.

  REFRESH so_matnr.
  CLEAR so_matnr.

  LOOP AT gt_matnr.
    so_matnr-sign   = 'I'.
    so_matnr-option = 'EQ'.
    so_matnr-low    = gt_matnr-matnr.
    APPEND so_matnr.
  ENDLOOP.


далее можно так:

Code:
  SELECT DISTINCT matnr
    APPENDING CORRESPONDING FIELDS OF TABLE gt_matnr
    FROM mara
    WHERE matnr IN so_matnr.



или попробуйте FOR ALL ENTRIES IN

извините влом сочинять .... типа так
Code:
SELECT * FROM SPFLI
  INTO TABLE T_SPFLI
  WHERE CITYFROM = 'FRANKFURT'
    AND CITYTO = 'NEW YORK'.
SELECT * FROM SFLIGHT AS F
    INTO SFLIGHT_WA
    FOR ALL ENTRIES IN T_SPFLI
    WHERE SEATSOCC < F~SEATSMAX
      AND CARRID = T_SPFLI-CARRID
      AND CONNID = T_SPFLI-CONNID
      AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Вт, янв 13 2009, 23:40 
Ассистент
Ассистент

Зарегистрирован:
Вт, янв 10 2006, 15:12
Сообщения: 32
Откуда: Белгород
Пол: Мужской
Join пробовали?

Получится что-то вроде:
Code:
Select L~MATNR a~maktx
from MKAL as L
into corresponding fields of table <имя_вашей_внутренней_таблички>
inner join MARA as A on A~matnr = L~matnr
where L~WERKS=P_Plant
and L~BDATU>P_Date
and L~ADATU<P_Date
and L~MKSP=’’
and L~MDV01=’PP-BOTL*’
and L~MATNR=’*1*L*’.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Вт, янв 13 2009, 23:49 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Code:
select mara~matnr
  from mkal
  join mara ON mkal~matnr = mara~matnr
  into table (lv_table)
  where mkal~werks = p_plant
      and mkal~BDATU > P_Date
      and MKAL~ADATU < P_Date
      and MKAL~MKSP = ’’
      and MKAL~MDV01 LIKE ’PP-BOTL%’
      and mara~matnr LIKE '%1%L%'.


А вообще плохой запрос получается. Долго работать будет...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Ср, янв 14 2009, 06:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, май 11 2007, 20:07
Сообщения: 138
Пол: Женский
dian написал:
Join пробовали?

Получится что-то вроде:
Code:
Select L~MATNR a~maktx
from MKAL as L
into corresponding fields of table <имя_вашей_внутренней_таблички>
inner join MARA as A on A~matnr = L~matnr
where L~WERKS=P_Plant
and L~BDATU>P_Date
and L~ADATU<P_Date
and L~MKSP=’’
and L~MDV01=’PP-BOTL*’
and L~MATNR=’*1*L*’.


что такое "имя внутренней таблички"?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Ср, янв 14 2009, 08:38 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 09:33
Сообщения: 300
Откуда: Москва
Пол: Женский
это имя таблицы - куда все выбранные данные сложить, а потом вы с ней в программе можете что хотите делать: "хоть варить, хоть жарить" :lol:

_________________
С уважением, HB.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Ср, янв 14 2009, 08:45 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
SQL в АБАБЕ немного отличается от SQL распространненых СУБД. Несущественно, но отличатся. Внутрення таблица - это таблица создающаяся на момент выполнения программы. Все данные, которыми вы оперируете в течении программы сохрняются либо в переменных либо, если вы работаете с табличными данными (как в этом случае), во внутренних таблицах.
Делая выборку из таблицы ABAB-словаря (прозрачной таблицы), результат должен сохраниться во внутреннюю таблицу


1.Query from table MKAL:

Select MATNR from MKAL into corresponding fields of table in_mkal
where MKAL-WERKS=P_Plant
and MKAL-BDATU>P_Date
and MKAL-ADATU<P_Date
and MKAL-MKSP=’’
and MKAL-MDV01=’PP-BOTL*’


2.Query from table MARA:

Select MAKTX from MARA INTO CORRESPONDING FIELDS OF TABLE in_mara
where MARA-MATNR=in_mkal-matnr
and MARA-MATNR=’*1*L*’

Вот так вот вы и свяжете два запроса.
Хотя у меня естьподозрения что запросы вы пишете не в ABAB'е ))

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Помогите связать 2 селекта
СообщениеДобавлено: Ср, янв 14 2009, 09:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
MAKTX не в MARA, а в MAKT.

Запросы, как уже писали, лучше объединить, но для MAKT лучше использовать left join.

=’PP-BOTL*’ следует писать как LIKE 'PP-BOTL%'.

Вместо дефиса нужно использовать тильду: MKAL~MDV01.

В MKAL-BDATU>P_Date, наверное, нужно >=.

Ограничение MARA-MATNR=’*1*L*’ можно вставить в первый селект к MKAL: MKAL~MATNR like '%1%L%'.

По скорости, наверное, всё будет хорошо, т.к. будет использован индекс 1 по полю MDV01.


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

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


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

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


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

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