Как сделать суммирование строк в зависимости от условий - PullRequest
0 голосов
/ 16 октября 2019

У меня есть набор данных, сохраненный в Excel в следующем формате.

enter image description here

Запрос, который я написал, дает следующий результат:

enter image description here

Запрос должен вернуть одну строку. То же самое происходит, если я ввожу дополнительные вычисляемые столбцы. Следовательно, если я добавлю сумму 2, количество 3 аналогичным образом, количество строк увеличивается на 4 (2 для каждой суммы), в сумме до 6 строк, из которых 3 строки будут возвращать значения NULL.

Структура таблицы, примеры данных имой запрос упомянут ниже:

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=3f8c9931554863583616d0f662230996

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

вы можете использовать фильтр

having sum(sales) is not null

редактировать после вашей скрипки

select CustomerName,BillNo,  sum(Amount)
from [dbo].[MarginTemp]
where [Type] = 'A'
group by  customername,BillNo

после редактирования вашей сегодняшней

SELECT  
       MAT.BillNo,MAT.ServiceCategoryName, 
       'Sep-19' AS MonthName,
    SUM(case when MAT.ServiceCategoryName = 'Z-Net Revenue'
     then MAT.Amount else 0 end) AS Amount

FROM MarginTemp MAT

WHERE 
MAT.BillNo='A202019339291'
GROUP BY MAT.BillNo,
         MAT.ServiceCategoryName
         having SUM(case when MAT.ServiceCategoryName = 'Z-Net Revenue'
     then MAT.Amount else 0 end)>0
ORDER BY BillNo ASC;

вы получаете нулевой в вашем запросе, потому чтовы использовали MAT.BillNo,MAT.ServiceCategoryName в группе, когда только одно имя ServiceCategoryName удовлетворяет условию, а для других оно показывает нулевое значение

после обсуждения, я получил исходную проблему

with cte as
(SELECT MAT.BillNo,
       ---MAT.ServiceCategoryName, 
       'Sep-19' AS MonthName
       ,  SUM( case when MAT.ServiceCategoryName='Z-NET Revenue' then MAT.Amount else 0 end) as AMOUNT
      , SUM( case when MAT.ServiceCategoryName='Internal Dr Visit Charges' then MAT.Amount else 0 end) as [Internal Dr Visit Charges]
      ,SUM( case when MAT.ServiceCategoryName='External Dr Visit Charges' then MAT.Amount else 0 end) as [External Dr Visit Charges]

FROM MarginTemp MAT
WHERE MAT.BillNo = 'A202019339291'

GROUP BY MAT.BillNo, 
         MAT.ServiceCategoryName
) select BillNo,MonthName,max(AMOUNT) as amt,
max([Internal Dr Visit Charges]) as [Internal Dr Visit Charges]
,max([External Dr Visit Charges]) as [External Dr Visit Charges]
from cte
group by BillNo,MonthName
0 голосов
/ 16 октября 2019

Ваш запрос выглядит так?

select customerid, customername, sum(sales)
from t
where subtype = 'A'
group by customerid, customername;

Это должно возвращать только одну строку на комбинацию customerid / customername, а не несколько строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...