Sql 如何根据where条件进行行求和

Sql 如何根据where条件进行行求和,sql,sql-server,Sql,Sql Server,我已将数据集以以下格式存储在excel中 我写的查询结果如下 查询应返回一行。如果我输入额外的计算列,也会发生同样的情况。因此,如果我添加amount2,amount3,同样地,行的数量会增加4(每个数量增加2),总计为6行,其中3行将返回空值 表结构、示例数据和我的查询如下: 您可以使用过滤器 having sum(sales) is not null 随手编辑 select CustomerName,BillNo, sum(Amount) from [dbo].[MarginTemp

我已将数据集以以下格式存储在excel中

我写的查询结果如下

查询应返回一行。如果我输入额外的计算列,也会发生同样的情况。因此,如果我添加amount2,amount3,同样地,行的数量会增加4(每个数量增加2),总计为6行,其中3行将返回空值

表结构、示例数据和我的查询如下:

您可以使用过滤器

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;
您在查询中得到null,因为您在group by中使用了
MAT.BillNo,MAT.ServiceCategoryName
,其中只有一个ServiceCategoryName满足条件,而对于其他服务类别,它显示为null

经过讨论,我得到了原版

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

您的查询是这样的吗

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

每个
customerid
/
customername
组合只能返回一行,而不是多行。

请参阅@RaymondNijland:给你!。希望这有帮助。“希望这有助于“不是很抱歉”,现在,我的sql查询将以以下格式返回结果。“仍然缺少生成问题中结果的查询…”。。。。。此外,还不“完全”清楚CustomerID在结果中的位置,因为SQLFIDLE与此处显示的列名和数据不完全匹配。@RaymondNijland:Question updatedReason我在外部查询中应用了按类型分组。这是因为子查询需要所有方面的类型筛选器,但这只是猜测溢出,而没有看到您正在使用@xorpower的示例和SQL查询。@xorpower找到了吗?@Zaynulabadinuthin:问题已用dbfiddle更新。uk@xorpower谢谢你的评论!!!请参阅更新后的问题