簡體   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