[英]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.