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