![]() |
|
|
#1
|
||||
|
||||
![]() Всем здраствуйте, с талкнулся с такой проблемой пишу запрос:
Код:
DM.ARH.Active:=false; DM.ARH.SQL.Clear; DM.ARH.SQL.Add('select sum(case when (sklad.flag=''0'') then sklad.kol else 0 end)- sum(case when(sklad.flag=''2'') then sklad.kol else 0 end), name'); DM.ARH.SQL.Add('sum(case when (sklad.flag=''0'') then sklad.summa else 0 end)- sum(case when(sklad.flag=''2'') then sklad.summa else 0 end),shet,price'); DM.ARH.SQL.Add('from sklad '); DM.ARH.SQL.Add('WHERE DATEBAY <= :D'); DM.ARH.SQL.Add('and KOL >0'); DM.ARH.SQL.Add('group by NAME, shet, price'); DM.ARH.Parameters.ParamValues['D'] := formatdatetime('yyyy.mm.dd', (datetimepicker1.Date)); DM.ARH.Active:=true; Но почемуто в результат попадают значения меньшие нуля и сам ноль, в чем ошибка подскажите? |
#2
|
|||
|
|||
![]() Если агрегатные функции возвращают sum(0) - sum(0), то результат этого выражения = 0.
Если функции в вычитании возвращают, например, sum(0) - sum(2), то результат = -2. |
#3
|
||||
|
||||
![]() что бы не было нулей добавляю условие
Код:
DM.ARH.SQL.Add('and KOL >0'); |
#4
|
|||
|
|||
![]() Условие KOL > 0 здесь ни при чем. Сервер сначала выбирает все записи с положительными значениями KOL, но потом в вычислении выражений запрос может вернуть и отрицательные и нулевые значения, согласно вышеприведенному примеру (sum(0) - sum(2)).
Смотрю на этот запрос и не понимаю почему "не нравятся" нулевые и отриц. значения. На складе могут быть и нулевые и отрицательные остатки. Кстати, в запросе синтаксическая ошибка. И как он у вас с ней работает? Абсолютно непонятно почему в запросе попытка вывести значения поля name (price, shet). Какой такой name в обобщающем запросе (где есть агрегатные функции, которые собирают данные из многочисленных строк, и из какой строки тогда этот name будет браться)? Тут надо наверное посмотреть в документации как такие запросы делаются вообще, теорию так сказать. |
#5
|
||||
|
||||
![]() Нормально работает, тогда подскажите как убрать нулевые и отрецательные остатки из результата?
|
#6
|
||||
|
||||
![]() Ну оберните кейсом результат суммирования, но без поллитры в таком запросе будет сложно разобраться
![]() Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |