![]() |
|
|
#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
|
||||
|
||||
|
Страдалец, спасибо ты настоящий мозг
![]() |