2017-05-18 18 views
1

SQL Server专家的问题。在下面的查询中,我希望有一个额外的列,它也是SUM数量,但是基于不同的需求类型。我尝试了一些想法 - CASE并在选择列表中添加子查询,但都返回了太多结果。我希望看到的是MATERIAL,MATERIAL_DESCRIPTION,SIZE_LITERAL,当需求类型='PB'时的数量总和,当需求类型='01'时的数量总和不确定如何在两个不同的条件下两次添加数量。在此先感谢同一列在查询中多次出现

SELECT MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL, 
     SUM(QUANTITY) AS 'SUM_FCST' 

FROM VW_MRP_ALLOCATION 

WHERE REQUIREMENT_CATEGORY = 'A60381002' 

AND MATERIAL_AVAILABILITY_DATE >= GETDATE() 

AND REQUIREMENT_TYPE ='PB' 


GROUP BY MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL 

ORDER BY MATERIAL, 
     SIZE_LITERAL 
+1

条件的总和。其中两个......并删除从第 – xQbert

回答

6

你会使用一个CASE表达SUM()内。这是有条件的聚集:

SELECT MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL, 
     SUM(case when REQUIREMENT_TYPE ='PB' then QUANTITY else 0 end) AS 'SUM_FCST_PB', 
     SUM(case when REQUIREMENT_TYPE ='01' then QUANTITY else 0 end) AS 'SUM_FCST_01'  
FROM VW_MRP_ALLOCATION 
WHERE REQUIREMENT_CATEGORY = 'A60381002' 
    AND MATERIAL_AVAILABILITY_DATE >= GETDATE() 
GROUP BY MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL 
ORDER BY MATERIAL, 
     SIZE_LITERAL 
+2

哪里删除条款的限制! – xQbert

+0

辉煌 - 并且谢谢 - 问题 - 如果您没有ELSE 0 END - 而只是结束,它会继续工作吗?如果不是为什么不呢?我感谢 – user3496218

+0

@ user3496218的帮助区别在于'else 0'会在没有匹配的行中插入一个零值,否则它就会为空。这取决于你想如何出现 - [这里是一个演示](http://data.stackexchange.com/stackoverflow/query/673031)。 – ollie

1

您可以使用内部和情况如下:使用case语句

SELECT MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL, 
     SUM(CASE WHEN [Requirement_Type] = 'PB' then QUANTITY else 0 end) AS 'SUM_FCST' 

FROM VW_MRP_ALLOCATION 

WHERE REQUIREMENT_CATEGORY = 'A60381002' 

AND MATERIAL_AVAILABILITY_DATE >= GETDATE() 

AND REQUIREMENT_TYPE ='PB' 


GROUP BY MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL 

ORDER BY MATERIAL, 
     SIZE_LITERAL 
相关问题