簡體   English   中英

Teradata SQL查詢以查找具有相同列值的字段總和

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM