簡體   English   中英

基於月列對數據進行分組的最佳方法是什么?

[英]What would be the best way to group my data that is based on monthly columns?

因此,基本上,我正在制作一個報告,顯示從1月到7月任何給定月份內所有產品的最高價格。理想情況下,我希望每個PartNo 1行,並顯示每個月的最高價格。 這是我的代碼和以下結果的照片:

SELECT
    pd.PartNo,
    CASE
        WHEN MONTH(p.DateEnt) = 1 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [Jan 2018],
    CASE
        WHEN MONTH(p.DateEnt) = 2 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [Feb 2018],
    CASE
        WHEN MONTH(p.DateEnt) = 3 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [Mar 2018],
    CASE
        WHEN MONTH(p.DateEnt) = 4 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [Apr 2018],
    CASE
        WHEN MONTH(p.DateEnt) = 5 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [May 2018],
    CASE
        WHEN MONTH(p.DateEnt) = 6 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [Jun 2018],
    CASE
        WHEN MONTH(p.DateEnt) = 7 AND YEAR(p.DateEnt) = 2018 THEN MAX(pd.UnitCost)
        END AS [Jul 2018]
FROM PODet pd
    JOIN PO p ON pd.PONum = p.PONum
    JOIN Estim e ON pd.PartNo = e.PartNo
WHERE p.DateEnt > '20180101'
GROUP BY pd.PartNo, p.DateEnt
ORDER BY pd.PartNo, p.DateEnt DESC

在此處輸入圖片說明

因此,如果您查看結果並查看PartNo CAB-01,您不僅可以看到它不是跨列分組,而且在同一個月內它也沒有分組。 我究竟做錯了什么? 提前Thx

您希望每個零件號都有一行,但是在GROUP BY子句中,您告訴它在每個零件號條目發生在的唯一日期每個行產生一行: GROUP BY Pd.PartNo, Pd.DateEnt 很顯然,CAB-01項目在7月有兩個不同的日期,因此它有兩行的值在'Jul 2018'下; 您只是不能說出它們是兩個不同的日期,因為確切的日期不是輸出的一部分。

要獲得所需的內容,需要從GROUP BYORDER BY子句中刪除Pd.DateEnt ,然后將MAX()CASE語句的內部移到外部,以使GROUP BY仍然有效:

SELECT
pd.PartNo,
MAX(CASE
    WHEN MONTH(p.DateEnt) = 1 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [Jan 2018],
MAX(CASE
    WHEN MONTH(p.DateEnt) = 2 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [Feb 2018],
MAX(CASE
    WHEN MONTH(p.DateEnt) = 3 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [Mar 2018],
MAX(CASE
    WHEN MONTH(p.DateEnt) = 4 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [Apr 2018],
MAX(CASE
    WHEN MONTH(p.DateEnt) = 5 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [May 2018],
MAX(CASE
    WHEN MONTH(p.DateEnt) = 6 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [Jun 2018],
MAX(CASE
    WHEN MONTH(p.DateEnt) = 7 AND YEAR(p.DateEnt) = 2018 THEN pd.UnitCost
    END) AS [Jul 2018]
FROM PODet pd
    JOIN PO p ON pd.PONum = p.PONum
    JOIN Estim e ON pd.PartNo = e.PartNo
WHERE p.DateEnt > '20180101'
GROUP BY pd.PartNo
ORDER BY pd.PartNo

而且,您根本沒有在查詢中使用ESTIM表,如圖所示,因此您可能希望將JOIN刪除掉。 如果要包括2018年的全部內容,則應將WHERE條件更改為WHERE p.DateEnt >= '20180101'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM