Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Teradata SQL查询以查找具有相同列值的字段的总和_Sql_Teradata - Fatal编程技术网

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;