Teradata SQL查询以查找具有相同列值的字段的总和
我只做了一件事。 我有一张这样的桌子Teradata SQL查询以查找具有相同列值的字段的总和,sql,teradata,Sql,Teradata,我只做了一件事。 我有一张这样的桌子 Departure | Arrival | SUM AAA | ZZZ | 100 ZZZ | AAA | 50 AAA | CCC | 60 我想得到相同路线的总和,这里的条件是,我应该将AAA-ZZZ和ZZZ-AAA路线视为一条路线。路线ZZZ-AAA它只是从原始目的地返回的路线 我试图得到这样的结果: Departure | Arrival | SUM AAA
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;
这可以在没有派生表的情况下进一步简化,但这真的很难理解,而且解释也是一样的。请发布一篇文章,以便我们可以修改它。这意味着为该表创建TABLE语句并插入到语句中以用示例数据填充它。这必须返回现有的组合吗?也就是说,在你的例子中只有AAA,CCC,CCC,AAA也是有效的结果吗?那么戈登的回答就会失败。嗨,多谢你的评论。CCC-AAA不是一个有效的结果,因为在本例中,原始表源中没有这样的路由组合。嗨,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;