sql - 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'];
解决方案
您只需使用条件聚合:
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。
推荐阅读
- javascript - ng-multiselect-dropdown - 'IDropdownSettings' 仅指一种类型,但在此处用作值
- angular-material - 选择 > 下拉可访问性问题
- javascript - 如何翻转具有特定方向的图像
- java - 使用 Stream 并行执行 100 次没有循环计数器
- c# - Open XML SDK:添加带边框的图像 (C#)
- python - 我的问题是关于 python spyder 中的缩进错误
- python - 如何在管道中指定操作?
- flutter - Flutter:如何处理多个 setState() 方法?
- scala - 使用 Spark 2.3 将列名作为新元素添加到结构数组
- python - 为什么 Python 内置的 .sort() 无法在我的 for 循环中工作?