[英]Teradata SQL query to find sum of fields with same column values
我真的只完成一項任務。 我有這樣的桌子
Departure | Arrival | SUM
AAA | ZZZ | 100
ZZZ | AAA | 50
AAA | CCC | 60
我想得到相同路由的總和,這里的條件是我應該將AAA-ZZZ和ZZZ-AAA路由視為一條路由。 路線ZZZ-AAA只是從原始目的地返回的路線。
我試圖獲得這樣的結果:
Departure | Arrival | SUM
AAA | ZZZ | 150
AAA | CCC | 60
有什么建議,想法,請問如何編寫我的sql查詢來實現?
問候,傑克
如果您需要保留列的順序(即a,b
但沒有b,a
必須返回現有組合),則必須擴展Gordon的解並為原始順序添加一個指示符。
SELECT
-- MIN(flag) = 1 -> departure < arrival
-- = 2 -> arrival > departure or both exist
CASE WHEN Min(flag)=1 THEN #1 ELSE #2 END AS departure,
CASE WHEN Min(flag)=2 THEN #1 ELSE #2 END AS arrival,
Sum(sumcol)
FROM
(
SELECT
Least(Departure, Arrival) AS #1,
Greatest(Departure, Arrival) AS #2,
sumcol, -- seems this is already result of an aggregation?
CASE WHEN departure < arrival THEN 1 ELSE 2 END AS flag
FROM nodupes
) t
GROUP BY #1,#2;
如果沒有派生表,則可以進一步簡化,但是這確實很難理解,而且無論如何都是相同的解釋。
只需使用least()
和greatest()
:
select least(Departure, Arrival) as Departure,
greatest(Departure, Arrival) as Arrival,
sum(al)
from t
group by least(Departure, Arrival),
greatest(Departure, Arrival);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.