Sql server 在查询中多次使用同一列

Sql server 在查询中多次使用同一列,sql-server,sum,Sql Server,Sum,SQL Server专家的问题。在下面的查询中,我希望有一个附加列,该列也对数量进行求和,但根据不同的需求类型进行求和。我尝试了一些想法-CASE和在select列表中添加子查询,但都返回了太多的结果。我想看到的是材料、材料描述、尺寸文字、需求类型为'PB'时的数量总和、需求类型为'01'时的数量总和。我不确定如何在两种不同条件下添加两次数量。提前谢谢 SELECT MATERIAL, MATERIAL_DESCRIPTION, SIZE_LITERAL,

SQL Server专家的问题。在下面的查询中,我希望有一个附加列,该列也对数量进行求和,但根据不同的需求类型进行求和。我尝试了一些想法-CASE和在select列表中添加子查询,但都返回了太多的结果。我想看到的是材料、材料描述、尺寸文字、需求类型为'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

您可以在
SUM()
中使用
CASE
表达式。这是条件聚合:

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

您可以在
SUM()
中使用
CASE
表达式。这是条件聚合:

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

您可以在sum中使用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

您可以在sum中使用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

使用case语句的条件和。其中两个。。。并使用case语句删除where子句条件和的限制。其中两个。。。并取消clausebriliant的限制-谢谢-问题-如果您没有其他0结束-而只是结束,它还会工作吗?若否,原因为何?我很感激help@user3496218不同之处在于
否则0将在不匹配的行中插入一个零值,否则它将为null。这取决于你希望它看起来是什么样子的-,太棒了-谢谢你-问题-如果你没有其他0结束-而只是结束,它还能工作吗?若否,原因为何?我很感激help@user3496218不同之处在于
否则0将在不匹配的行中插入一个零值,否则它将为null。这取决于您希望它如何显示-。