我有一張看起來像這樣的表:
| 發件人 | 收貨人 | 數量 |
|---|---|---|
| 1 | 2 | 10 |
| 2 | 1 | 20 |
| 3 | 2 | 20 |
| 1 | 3 | 30 |
所需的輸出應該是:
| 用戶 | Trans_Change |
|---|---|
| 1 | -20 |
| 2 | 10 |
| 3 | 10 |
我找不到在 SQL 中為其撰寫查詢的方法。所需輸出背后的邏輯應該是這樣的;1 發送 2 個 10,所以現在 1 有:-10 和 2 有: 10 等等......
uj5u.com熱心網友回復:
已知資訊的最佳猜測:
我們簡單地將所有發送者的負交易金額分配給所有接收者作為正金額,然后將總和交易的資料分組
With CTE AS (
SELECT sender as aUser, (-1 * amount) as Trans_Change -- Senders lose money
FROM table
UNION ALL
SELECT Receiver as aUser, amount -- receivers get money
FROM Table)
SELECT aUser, sum(Trans_Change) as Trans_Change -- aggregate transaction totals by user
FROM CTE
GROUP BY aUser
解決這個問題的一部分是承認一個金額被使用了兩次:一次是發送者作為負數,一次是接收者作為正數(或信用卡/借記,如果你愿意)意識到這一點,我知道我需要在兩個單獨的行。為此允許兩次選擇資料。使用兩個 select 和一個 union all 允許我們兩次獲得該值,然后它是一個簡單的聚合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379320.html
標籤:sql sql-server
