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