SQL Server 2008:如何基于两个条件求和?

SQL Server 2008:如何基于两个条件求和?,sql,sql-server,Sql,Sql Server,如果我在一家杂货店工作,需要订购存货,我们一个月要订购多次,而不是一次大订单 项目 希腊字母表的第7个字母 数量 苹果 5/6/21 10 苹果 6/12/21 15 苹果 6/30/21 10 香蕉 6/12/21 15 香蕉 7/5/21 20 谷类食品 5/15/21 10 谷类食品 5/30/21 50 谷类食品 7/15/21 20 您只需使用条件聚合: select item, sum(case when month(eta) = 5 then qty else 0 e

如果我在一家杂货店工作,需要订购存货,我们一个月要订购多次,而不是一次大订单

项目 希腊字母表的第7个字母 数量 苹果 5/6/21 10 苹果 6/12/21 15 苹果 6/30/21 10 香蕉 6/12/21 15 香蕉 7/5/21 20 谷类食品 5/15/21 10 谷类食品 5/30/21 50 谷类食品 7/15/21 20
您只需使用条件聚合:

select item,
       sum(case when month(eta) = 5 then qty else 0 end) as may,
       sum(case when month(eta) = 6 then qty else 0 end) as jun,
       sum(case when month(eta) = 7 then qty else 0 end) as jul
from inventory i
group by item;

我要提醒你,使用几个月而不是一年可能会导致问题。使用不受支持的软件时也是如此——SQL Server 2008不再受支持。

首先应按项目和月份对数据进行分组,然后使用pivot将行转换为列

select
    item, 
    isnull(may,0) as May, 
    isnull(june,0) as June, 
    isnull(july,0) as July
from
(
  select item, datename(month, ETA) as _month, sum(qty) as qty
  from Inventory
  group by item, datename(month, ETA)
) d
pivot
(
  sum(qty)
  for _month in (may, june, july)
) piv;

这称为枢轴或条件聚合。在上文中,你得到语法错误的原因是因为你有一个<代码>在你的语句中间,。而且,2008已经完全不支持近2年了。你真的需要尽快查看升级路径。谢谢你,这非常适合我的需要!