[英]CASE expressions using values from different rows
我有下表
WITH TMP AS (
SELECT 'XX' AS AGG, 50 AS VALUE, 0 AS MONTH
UNION ALL
SELECT 'XX' AS AGG, 150 AS VALUE, 1 AS MONTH
UNION ALL
SELECT 'XX' AS AGG, 300 AS VALUE, 2 AS MONTH
UNION ALL
SELECT 'YY' AS AGG, 25 AS VALUE, 0 AS MONTH
UNION ALL
SELECT 'YY' AS AGG, 50 AS VALUE, 1 AS MONTH
UNION ALL
SELECT 'YY' AS AGG, 75 AS VALUE, 2 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG, 500 AS VALUE, 0 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG, 600 AS VALUE, 1 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG, 700 AS VALUE, 2 AS MONTH
)
-- CASE WHEN VALUE OF 'XX' > 0 THEN VALUE OF 'ZZ' ELSE 0 END
SELECT
*
FROM TMP
WHERE 1 = 1
我需要始終考慮月份對其應用以下業務邏輯。
'XX' 的值 > 0 的情況,然后 'ZZ' 的值 ELSE 0 END
這個邏輯應該映射到一個新表中。 結果應如下表所示。
我想避免加入同一張表。 這是否可能使用窗口函數或類似的東西? 這個想法是在同一個 sql 語句中構建幾個 case when 語句作為上面的一個。
IE1 | 月 |
---|---|
500 | 00 |
600 | 01 |
700 | 02 |
透視(有條件地聚合)您的數據,然后根據您的表達式返回您需要的值:
WITH TMP AS
(SELECT 'XX' AS AGG,
50 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'XX' AS AGG,
150 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'XX' AS AGG,
300 AS VALUE,
2 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
25 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
50 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'YY' AS AGG,
75 AS VALUE,
2 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
500 AS VALUE,
0 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
600 AS VALUE,
1 AS MONTH
UNION ALL
SELECT 'ZZ' AS AGG,
700 AS VALUE,
2 AS MONTH),
--Solution
/*WITH */Pvt AS(
SELECT Month,
MAX(CASE Agg WHEN 'XX' THEN VALUE END) AS XX,
--MAX(CASE Agg WHEN 'YY' THEN VALUE END) AS YY,--Not needed hence commented out
MAX(CASE Agg WHEN 'ZZ' THEN VALUE END) AS ZZ
FROM TMP
GROUP BY MONTH)
SELECT CASE WHEN XX > 0 THEN ZZ ELSE 0 END AS IE1,
MONTH
FROM Pvt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.