Teradata SQL查询以查找具有相同列值的字段总和

时间:2017-07-26 09:40:47

标签: sql teradata

我真的坚持一项任务。 我有这样一张桌子

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查询来实现?

此致 千斤顶

2 个答案:

答案 0 :(得分:1)

如果您需要按照列的顺序保留(例如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;

这可以在没有派生表的情况下进一步简化,但是它真的很难理解,无论如何它都是相同的解释。

答案 1 :(得分:0)

只需使用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);