SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

подзапрос в условии



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
dr.killer
Участник
Участник



Joined: 31 Oct 2007
Posts: 24
Location: 4.7, ECC 6.0

PostPosted: Sun Sep 04, 2011 10:51 pm    Post subject: подзапрос в условии Reply with quote

Всем привет... задачка раскинуть мозгами...
Имеем запрос с подзапросами... примерно такой

Code:
select
....
where
....
AND vbeln IN ( select vbeln from... where erdat IN so_erdat)
...

В двух словах, надо если so_erdat в подзапросе пусто, сделать так что бы этого условия в запросе как бы небыло вообще...
В таком виде запрос показывает все непустые vbeln для подзапроса, а мне нужны все...

Условие такое надо сделать именно в этом запросе... делить нельзя, можете даже не писать ))
Back to top
View user's profile Send private message
demst
Участник
Участник



Joined: 17 Jul 2008
Posts: 18

PostPosted: Mon Sep 05, 2011 10:08 am    Post subject: Reply with quote

so_erdat - select-options?
Если да и оно пустое, то его как бы не будет вопще.
А если необходимо выбирать непустые vbeln, то с данным видом запроса так не получится, условие по so_erdat на это никак не влияет.
Back to top
View user's profile Send private message
FeBO-Sh
Участник
Участник


Age: 38
Joined: 25 Aug 2011
Posts: 7

PostPosted: Mon Sep 05, 2011 10:09 am    Post subject: Reply with quote

Вряд ли такое можно в OPEN SQL, хотя я могу ошибаться.
Можно через динамические условия.
Code:

SELECT (select)
INTO CORRESPONDING FIELDS OF TABLE <itab>
FROM (from)
WHERE (cond_syntax).

Правда код будет не очень читабельным, да и сути это в принципе не меняет.
Back to top
View user's profile Send private message
dr.killer
Участник
Участник



Joined: 31 Oct 2007
Posts: 24
Location: 4.7, ECC 6.0

PostPosted: Mon Sep 05, 2011 2:00 pm    Post subject: Reply with quote

эх пришлось нафигачить 4 запроса одинаковых почти... некрасиво может, но очень практично ))
Back to top
View user's profile Send private message
FeBO-Sh
Участник
Участник


Age: 38
Joined: 25 Aug 2011
Posts: 7

PostPosted: Mon Sep 05, 2011 3:21 pm    Post subject: Reply with quote

dr.killer wrote:
эх пришлось нафигачить 4 запроса одинаковых почти... некрасиво может, но очень практично ))

Code:

DEFINE get_cond.
IF so_erdat[] IS NOT INITIAL.
cond_syntax = ....
ELSEIF ....
cond_syntax = ...
ELSEIF ....
cond_syntax = ...
.....
ENDIF.

FORM get_data.
DATA: cond_syntax TYPE string
        .
...

get_cond. " Get condition

TRY.
SELECT ...
INTO ...
FROM ...
WHERE (cond_syntax).
CATCH cx_sy_dynamic_osql_error.
    MESSAGE 'Error in COND_SYNTAX' TYPE 'I'.
    RETURN.
ENDTRY.

ENDFORM.
Back to top
View user's profile Send private message
dr.killer
Участник
Участник



Joined: 31 Oct 2007
Posts: 24
Location: 4.7, ECC 6.0

PostPosted: Mon Sep 05, 2011 3:36 pm    Post subject: Reply with quote

там запрос с 6ю подселектами в каждом есть параметры... я поседею пока напишу динамическое условие ))
Back to top
View user's profile Send private message
FeBO-Sh
Участник
Участник


Age: 38
Joined: 25 Aug 2011
Posts: 7

PostPosted: Mon Sep 05, 2011 3:42 pm    Post subject: Reply with quote

dr.killer wrote:
там запрос с 6ю подселектами в каждом есть параметры... я поседею пока напишу динамическое условие ))

Зато красиво Very Happy. А вообще советую использовать EXISTS вместо IN ( SELECT ... ). Где-то на форуме по оптимизации читал что такая архитектура подзапроса лучше. Можно в принципе проверить самому в трассировке. Если найду ссылку скину.
Back to top
View user's profile Send private message
dr.killer
Участник
Участник



Joined: 31 Oct 2007
Posts: 24
Location: 4.7, ECC 6.0

PostPosted: Mon Sep 05, 2011 4:39 pm    Post subject: Reply with quote

про EXIST знаю
Back to top
View user's profile Send private message
broker_chelny
Участник
Участник



Joined: 23 Jan 2010
Posts: 26
Location: Naberezhnye Chelny

PostPosted: Fri Sep 16, 2011 8:27 am    Post subject: Reply with quote

Join'ом нельзя присоединить, а условие спустить в основной запрос?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.