我有以下格式的数据集存储在excel中。
我写错了下面的结果。
查询应返回一行。如果输入其他计算列,也会发生同样的情况。因此,如果我同样添加数量2,数量3,则行数增加4(每个数量为2),总计为6行,其中3行将返回NULL值。
表结构,示例数据和我的查询如下:
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=3f8c9931554863583616d0f662230996
答案 0 :(得分:2)
您可以使用过滤器
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
答案 1 :(得分:0)
您的查询看起来像这样吗?
select customerid, customername, sum(sales)
from t
where subtype = 'A'
group by customerid, customername;
每个customerid
/ customername
组合仅返回一行,而不返回多行。