Текущее время: Вс, июн 29 2025, 22:18

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Преобразование типов
СообщениеДобавлено: Вт, дек 06 2005, 19:01 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Добрый день!

Подскажите, плз, есть в abap-е в запросе возможность использовать преобразование типов?
Например, в некоторых полях в результате запроса может быть NULL. В некоторых языках манипуляции данными можно написать так:
SELECT
vbeln
charg
when NULL then 0 else <ИмяПоля> AS amount
FROM
...

... и если в таблице будет NULL в поле <ИмяПоля>, то вместо него в результате запроса будет 0.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 02:59 
Гость
или мне мерещится или я где то в хелпах видел NVL функцию ... в оракле работает так:
nvl(<имя поля>,<значение если в поле null>) ...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 09:52 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Вот в том-то и дело, что в хелпе не могу найти ничего подходящего...
Интересно, если я использую агрегатную фукцию (например SUM) для полей, где может находиться NULL, вычисление этой фукции пройдет нормально, NULL не повлияет на результат?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 10:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Коллеги, есть подозорение, что значений null попросту не бывает в саповских таблицах. Думаю, для интереса можно проверить при помощи EXEC SQL (см. help). В Open SQL не используется NULL. А NVL вам точно померещилось.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 10:22 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Значений может и не бывает в таблицах, а вот в результатах запросов...
Надо посмотреть суммарное количество товара по партиям заказанное и количество фактурированное.
Выбираю строки из таблицы данных по позициям заказов, делаю левое соединение с данными по позициям сбытовых фактур. Теперь, если не было фактур, то в количестве фактурированном будет NULL.
Вопрос: что будет, если использовать агрегатную фукцию SUM для поля "количество" из фактур? Просуммирует значения и не учет NULL?

P.S.Может вообще есть более простой способ получения требуемых данных...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 10:32 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Я так понимаю что NULL и 0 для чисел в open sql, да и вообще в абапе эквивалентны, по крайней мере ни разу не сталкивался с обратным. Так что скорее всего преспокойно можно суммировать. Но как обычно лучше провести опыт :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 10:45 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
Тоже как-то задумывался над этим вопросом решил что NULL в таблицах словаря не бывает хотя проверка в АБАП
Code:
is null
точно есть


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 10:47 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
Ich Will написал:
Тоже как-то задумывался над этим вопросом решил что NULL в таблицах словаря не бывает хотя проверка в АБАП
Code:
is null
точно есть


бывает NULL. достаточно поле к таблице добавить новое. так вот для существующих данных туда (на уровне БД проверял) пишется NULL. и это не 0. initial значения это поле приобретет после инициирования преобразования в утилите базы данных. IMHO.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 11:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
holocron написал(а):
бывает NULL.

Вот блин, и правда бывает, говорили ведь, "учи матчасть" :oops:
А вот что каксается SUM, надо бы просто смоделировать ситуацию с NULL и поглядеть, что получится.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 11:44 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 07 2004, 10:39
Сообщения: 610
holocron написал(а):
Ich Will написал:
Тоже как-то задумывался над этим вопросом решил что NULL в таблицах словаря не бывает хотя проверка в АБАП
Code:
is null
точно есть


бывает NULL. достаточно поле к таблице добавить новое. так вот для существующих данных туда (на уровне БД проверял) пишется NULL. и это не 0. initial значения это поле приобретет после инициирования преобразования в утилите базы данных. IMHO.

так и есть
сам на этом обжегся, приходилось ручками апдейтить табицу прописывая абаповский initial. но это скорее ошибка чем нормальный случай.
если например из sql навигатора проверять на поле is null, ничего не получиться, нужно писать поле = ' ', пробелов по типу поля

_________________
полный SAPец


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 13:29 
Гость
NULL в таблицах есть. Для отсеивания используется предожение IS NULL в условии WHERE. Того что хочется(типа - приведение null-значения к чему-то другому) - нет, это ж open sql. Кроме того, я уж не знаю чем это обусловленно(версия БД, уровень патча системы), но в одних системах срабатывает is nul,l а в других(таблицы те же, поля те же,тиражируемое решение) только сравнение поля со space1


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 07 2005, 13:35 
Гость
Кодер1 написал(а):
NULL в таблицах есть. Для отсеивания используется предожение IS NULL в условии WHERE. Того что хочется(типа - приведение null-значения к чему-то другому) - нет, это ж open sql. Кроме того, я уж не знаю чем это обусловленно(версия БД, уровень патча системы), но в одних системах срабатывает is nul,l а в других(таблицы те же, поля те же,тиражируемое решение) только сравнение поля со space1


есть предположение, что если инициировать преобразование таблицы в утилите БД, то NULL будут заменены на initial значения согласно домену.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 08 2005, 02:22 
Гость
Сергей Королев написал:
holocron написал(а):
бывает NULL.

Вот блин, и правда бывает, говорили ведь, "учи матчасть" :oops:
А вот что каксается SUM, надо бы просто смоделировать ситуацию с NULL и поглядеть, что получится.


ридми то проще почитать :)

Code:
SUM         Returns the sum of all values in the column     
               determined by the database field f for the     
               selected lines. SUM can only apply to a numeric
               field. NULL values are ignored unless all values
               in a column are NULL values. In this case, the 
               result is NULL.                                 


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 08 2005, 02:41 
Гость
да кстати ... а ведь NVL можно использовать внутри EXEC SQL ... чем не выход ?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 08 2005, 07:16 
Гость
Ну такое поведение, что агрегатные функции игнорируют при вычислениие null - это вроде стандартно для sql ...
А nvl в OpenSQL вроде как и нет, так что ее только native через exec sql использовать


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

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


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

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


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

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