Teradata SQL 查询以查找具有相同列值的字段总和
Teradata SQL query to find sum of fields with same column values
我真的坚持完成一项任务。
我有一个这样的table
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 查询来实现该目标的任何建议和想法?
此致,
杰克
只需使用 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);
如果您需要保留列的顺序(即 a,b
但没有 b,a
必须 return 现有组合)您必须扩展 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;
这可以在没有 Derived 的情况下进一步简化 Table,但是它真的很难理解,无论如何都是一样的解释。
我真的坚持完成一项任务。 我有一个这样的table
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 查询来实现该目标的任何建议和想法?
此致, 杰克
只需使用 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);
如果您需要保留列的顺序(即 a,b
但没有 b,a
必须 return 现有组合)您必须扩展 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;
这可以在没有 Derived 的情况下进一步简化 Table,但是它真的很难理解,无论如何都是一样的解释。