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