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