Текущее время: Вт, июл 29 2025, 17:31

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 10:24 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Может кто-то сможет увидеть что-то новое.. в общем, этот запрос, выбирает так же данные, в которых поля DOC_NUM и /BIC/YEBELP пустые. Но как видно из запроса, этого быть не должно. Подскажите плиз в чём может быть дело.
В данном случае уже даже проверка на IS NOT NULL избыточна во вложенном селекте, но вставил т.к. уже просто не приложу ума почему так работает.

Code:
SELECT *
       INTO CORRESPONDING FIELDS OF TABLE lt_dso2
       FROM dso1 AS idso INNER JOIN dso2 AS ldso
       ON idso~/BIC/YMBLNR = ldso~/BIC/YMBLNR AND
          idso~DOC_ITEM = ldso~DOC_ITEM AND
          idso~DOC_YEAR = ldso~DOC_YEAR AND
          idso~BWCOUNTER = ldso~BWCOUNTER
       FOR ALL ENTRIES IN SOURCE_PACKAGE
       WHERE ( idso~movetype = '101' OR idso~movetype = '951' ) AND
           idso~/BIC/YMBLNR = SOURCE_PACKAGE-/BIC/YMBLNR
       AND idso~DOC_ITEM = SOURCE_PACKAGE-DOC_ITEM
       AND idso~DOC_YEAR = SOURCE_PACKAGE-DOC_YEAR
       AND idso~BWCOUNTER = SOURCE_PACKAGE-BWCOUNTER
       AND ldso~DOC_NUM IS NOT NULL AND ldso~/BIC/YEBELP IS NOT NULL
       AND EXISTS ( SELECT * FROM dso2
                        WHERE ( movetype = '641' OR movetype = '643' )
                        AND MATERIAL = ldso~MATERIAL
                        AND ( DOC_NUM IS NOT NULL AND DOC_NUM =
                        ldso~DOC_NUM )
                        AND ( /BIC/YEBELP IS NOT NULL AND /BIC/YEBELP =
                        ldso~/BIC/YEBELP )
                        AND
         ( PSTNG_DATE >= '20090825' OR ENTRYDATE >= '20090825' ) ).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом  Тема решена
СообщениеДобавлено: Пт, авг 28 2009, 10:26 
Специалист
Специалист

Зарегистрирован:
Пт, окт 20 2006, 16:39
Сообщения: 230
Проверка на not null не будет работать, т.к. реально поля могут быть заполнены как initial.
Надо делать проверку на not initial.
Если в самом запросе это не прокатит, то в цикле после отсеивать лишние записи.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 12:24 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
В саповских таблица значение NULL бывает только по некоторым стечениям обстоятельств (например после добавления поля без указания флага инициализации), поэтому 'пустое значение <> NULL'.
Попробуйте добавить в основной запрос строчку:
Code:
AND ldso~DOC_NUM <> '' AND ldso~/BIC/YEBELP <> ''

строчку
Code:
AND ldso~DOC_NUM IS NOT NULL AND ldso~/BIC/YEBELP IS NOT NULL
думаю можно выкинуть

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 13:19 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
<> '' уже пробовал до этого, потом поставил NULL, ни то ни другое не работает. Причём там одно поле char второе numc. Сейчас задал переменные как INITIAL и сравниваю с ними, надеюсь пройдёт т.к. запрос долго работает.
Но вообще, херь какая-то если честно, если NULL не включает проверку на INITIAL, почему SQL встроенные даже не имеет слова INITIAL в опреторах.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 13:25 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
tdebug написал(а):
<> '' уже пробовал до этого, потом поставил NULL, ни то ни другое не работает. Причём там одно поле char второе numc. Сейчас задал переменные как INITIAL и сравниваю с ними, надеюсь пройдёт т.к. запрос долго работает.
Но вообще, херь какая-то если честно, если NULL не включает проверку на INITIAL, почему SQL встроенные даже не имеет слова INITIAL в опреторах.

Для поля типа char пишите <> '' или no initial для поля типа numc пишите not Null. Вроде так.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 13:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
сумчатый запрос


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 13:43 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
tdebug написал(а):
<> '' уже пробовал до этого, потом поставил NULL, ни то ни другое не работает. Причём там одно поле char второе numc. Сейчас задал переменные как INITIAL и сравниваю с ними, надеюсь пройдёт т.к. запрос долго работает.
Но вообще, херь какая-то если честно, если NULL не включает проверку на INITIAL, почему SQL встроенные даже не имеет слова INITIAL в опреторах.

Некоторые труднообъяснимые проблемы с SQL-запросами решаются пересборкой статистики участвующих таблиц. Попробуйте

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:13 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Тут не вопрос в сложности запроса, я сделал такой же но без джоина и поставил эксперимента ради вот так:

Code:
AND idso~DOC_NUM IS NOT NULL AND idso~DOC_NUM <> chr_init1
       AND idso~DOC_NUM <> '' AND idso~DOC_NUM <> ' '
       AND idso~/BIC/YEBELP IS NOT NULL AND idso~/BIC/YEBELP <>
       num_init1
       AND idso~/BIC/YEBELP <> 0 AND idso~/BIC/YEBELP <> 00000


где переменные объявлены так

Code:
chr_init1   TYPE c VALUE IS INITIAL,
           num_init1(5)   TYPE n VALUE IS INITIAL.


Ни одно из этих условий не сработало. Не бред ли?
Не знаю что делать уже абсолютно.

Если писать перебор внутренней таблицы после запроса и отсеивать пустые - по какому условию это делать там? Если ни одно из них не сработало в SQL запросе.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
насколько я помню, лучше сравнивать на <> space

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:22 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
tdebug написал(а):
Ни одно из этих условий не сработало. Не бред ли?
Не знаю что делать уже абсолютно.

Если писать перебор внутренней таблицы после запроса и отсеивать пустые - по какому условию это делать там? Если ни одно из них не сработало в SQL запросе.

и все таки, попросите базис пересобрать статистику по таблицам dso1 и dso2 :) может и поможет

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:29 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Если Вы хотите чтоб сработало хотя бы одно из условий то надо писать OR.
idso~/BIC/YEBELP <> 00000 пишется так idso~/BIC/YEBELP <> '00000'.
Совет, напишите простенькую программку и проверьте ваши условия из данных внутренней таблицы в отладчике, там увидите что и как работает, Ваш запрос не стал разбирать, может что то не попадает не из за этого, поэтому предлагаю Вам отладить эти моменты на элементарных примерах.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:42 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Besa написал:
Если Вы хотите чтоб сработало хотя бы одно из условий то надо писать OR.
idso~/BIC/YEBELP <> 00000 пишется так idso~/BIC/YEBELP <> '00000'.
Совет, напишите простенькую программку и проверьте ваши условия из данных внутренней таблицы в отладчике, там увидите что и как работает, Ваш запрос не стал разбирать, может что то не попадает не из за этого, поэтому предлагаю Вам отладить эти моменты на элементарных примерах.


Подождите, мне наоборот надо чтобы данные не выбирались, если сработает хотя бы одно. Или по другому - чтобы выбирались только если сработают все. Т.е. в запросе надо AND.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:49 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Если Вам нужны записи у которых idso~/BIC/YEBELP и idso~DOC_NUM пустые то пишите idso~/BIC/YEBELP = '00000' and idso~DOC_NUM = ''.
Добавил: Ой не так, теперь и я запутался :)
Вам нужны записи у которых idso~/BIC/YEBELP <> '00000' and idso~DOC_NUM <> ''.
что если это пишите все равно есть записи у которых оба этих полей имеют исключенные значения?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с SQL запросом
СообщениеДобавлено: Пт, авг 28 2009, 14:54 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 15:14
Сообщения: 280
Besa написал:
Если Вам нужны записи у которых idso~/BIC/YEBELP и idso~DOC_NUM пустые то пишите idso~/BIC/YEBELP = '00000' and idso~DOC_NUM = ''.
Добавил: Ой не так, теперь и я запутался :)
Вам нужны записи у которых idso~/BIC/YEBELP <> '00000' and idso~DOC_NUM <> ''.
что если это пишите все равно есть записи у которых оба этих полей имеют исключенные значения?


Нет, мне НЕ нужны записи у которых эти поля пусты :)


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

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


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

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


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

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