繁体   English   中英

SQL Server 2008:如何根据两个条件求和?

[英]SQL Server 2008: How do you SUM based on two conditions?

如果我在杂货店工作并且需要为库存下订单,我们每个月都会下多次订单,而不是一个大订单。

物品 预计到达时间 数量
苹果 21 年 5 月 6 日 10
苹果 21 年 6 月 12 日 15
苹果 21 年 6 月 30 日 10
香蕉 21 年 6 月 12 日 15
香蕉 21 年 7 月 5 日 20
谷物 21 年 5 月 15 日 10
谷物 21 年 5 月 30 日 50
谷物 21 年 7 月 15 日 20

有没有办法创建一个汇总 QTY 的表格,如果项目相同并且 ETA 月份是否相同,以了解每个项目在给定月份预计会到达多少?

理想情况下,我正在寻找的结果是这样的

物品 可能 六月 七月
苹果 10 25 0
香蕉 0 15 20
谷物 60 0 20

我需要代码首先检查该项目预计到达的月份,然后如果有多个行具有相同的项目和 ETA 月份,则对数量求和。

我试过做 CASE WHEN 语句,但总是以语法错误结束

SELECT 
    CASE WHEN ETA BETWEEN '2021-05-01' AND '2021-05-31'
    AND WHERE Item IN 
        (SELECT Item 
        FROM ['Inventory'] 
        GROUP BY Item HAVING COUNT(*)>1)
        THEN SUM(QTY)
    END AS MAY_QTY
        
FROM [dbo].['Inventory'];

您只需使用条件聚合:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM