首页 > 解决方案 > SQL Server 2008:如何根据两个条件求和?

问题描述

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

物品 预计到达时间 数量
苹果 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'];

标签: sqlsql-server

解决方案


您只需使用条件聚合:

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。


推荐阅读