我正在尝试寻找一种更紧凑的代码形式和更快的方式来执行需要(或者至少我认为需要)按两个case语句分组的查询
我试过使用OVER PARTITION,但似乎不能得到想要的结果
SELECT
CASE
WHEN AA.BUSINESS_SEGMENT LIKE 'YEPPERS%'
THEN 'YES'
ELSE 'NO'
END 'YZY',
CASE
WHEN MONTH(POI.EX_FACTORY_DATE) >= 1 AND MONTH(POI.EX_FACTORY_DATE) <=3
THEN
'Q1'
WHEN MONTH(POI.EX_FACTORY_DATE) >= 4 AND MONTH(POI.EX_FACTORY_DATE) <=6
THEN
'Q2'
WHEN MONTH(POI.EX_FACTORY_DATE) >= 7 AND MONTH(POI.EX_FACTORY_DATE) <=9
THEN
'Q3'
WHEN MONTH(POI.EX_FACTORY_DATE) >= 10 AND MONTH(POI.EX_FACTORY_DATE) <=12
THEN
'Q4'
END 'QTR',
SUM(POI.PO_ORDERED_QUANTITY) PO_QTY
FROM VW_PO_ITEM POI
LEFT JOIN VW_ARTICLE_ATTRIBUTES AA ON AA.ARTICLE = POI.MATERIAL
WHERE POI.DEL_INDICATOR <> 'L' AND POI.EX_FACTORY_DATE BETWEEN '7/1/2019' AND '12/31/2019' AND ((POI.SHIPPING_INSTRUCT='A2' AND AA.BUSINESS_SEGMENT NOT LIKE 'YEPPERS%') OR AA.BUSINESS_SEGMENT LIKE 'YEPPERS%')
GROUP BY
CASE
WHEN AA.BUSINESS_SEGMENT LIKE 'YEPPERS%'
THEN 'YES'
ELSE 'NO'
END,
CASE
WHEN MONTH(POI.EX_FACTORY_DATE) >= 1 AND MONTH(POI.EX_FACTORY_DATE) <=3
THEN
'Q1'
WHEN MONTH(POI.EX_FACTORY_DATE) >= 4 AND MONTH(POI.EX_FACTORY_DATE) <=6
THEN
'Q2'
WHEN MONTH(POI.EX_FACTORY_DATE) >= 7 AND MONTH(POI.EX_FACTORY_DATE) <=9
THEN
'Q3'
WHEN MONTH(POI.EX_FACTORY_DATE) >= 10 AND MONTH(POI.EX_FACTORY_DATE) <=12
THEN
'Q4'
END --desired result (the query above does produce this)
YZY QTR PO_QTY
-------- ---- ---------------------------------------
NO Q4 389309
YES Q4 649842
YES Q3 843438
NO Q3 20146发布于 2019-08-28 08:38:05
考虑使用CTE在最终聚合之前处理单元级别的计算,以避免重复。另外,查看DatePart以从日期时间字段中提取日期部分:
WITH cte AS (
SELECT CASE
WHEN AA.BUSINESS_SEGMENT LIKE 'YEPPERS%'
THEN 'YES' ELSE 'NO'
END [YZY],
DATEPART(qq, POI.EX_FACTORY_DATE) AS [QTR],
POI.PO_ORDERED_QUANTITY
FROM VW_PO_ITEM POI
LEFT JOIN VW_ARTICLE_ATTRIBUTES AA
ON AA.ARTICLE = POI.MATERIAL
WHERE POI.DEL_INDICATOR <> 'L'
AND POI.EX_FACTORY_DATE BETWEEN '2019-07-01' AND '2019-12-31'
AND (
(POI.SHIPPING_INSTRUCT='A2'
AND AA.BUSINESS_SEGMENT NOT LIKE 'YEPPERS%')
OR
AA.BUSINESS_SEGMENT LIKE 'YEPPERS%'
)
)
SELECT [YZY], [QTR],
SUM(POI.PO_ORDERED_QUANTITY) AS PO_QTY
FROM cte
GROUP BY [YZY], [QTR]发布于 2019-08-28 08:17:12
我认为使用DATEPART(季度)更好
FROM MyTable
GROUP BY DATEPART(quarter, columndate)https://stackoverflow.com/questions/57683438
复制相似问题