![]() |
|
#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
|
||||
|
||||
![]() Ну оберните кейсом результат суммирования, но без поллитры в таком запросе будет сложно разобраться
![]() Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
||||
|
||||
![]() Цитата:
Так стоп а подробней мона примерчик небольшой хотябы, плиззззззззз..... |
#8
|
||||
|
||||
![]() Почему-бы вам не написать нормальную хранимку, где последовательно выполнить ряд запросов и уже результат вернуть в виде таблицы.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
||||
|
||||
![]() Цитата:
|
#10
|
||||
|
||||
![]() Ну хорошо, попробую. Раз выводить надо только положительные результаты, то можно попробовать дописать условие отбора:
Код:
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, 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 from sklad WHERE (DATEBAY <= :D) and (KOL > 0) and (sum(case when (sklad.flag=''0'') then sklad.kol else 0 end)- sum(case when(sklad.flag=''2'') then sklad.kol else 0 end) > 0) and (sum(case when (sklad.flag=''0'') then sklad.summa else 0 end)- sum(case when(sklad.flag=''2'') then sklad.summa else 0 end) > 0) group by NAME, shet, price ПС: Непонятно, почему у вас запрос проходит без ошибок, ведь после name должна стоять запятая, а ее нет. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
||||
|
||||
![]() Страдалец, спасибо ты настоящий мозг
![]() |