我需要使用PostgresSql。我如下表叫錢作爲輸入顯示兩行之間變化的所有列
Cash | Adhoc | Collateral | Total
---------------------------------
20 | 30 | 40 | 90
32 | 12 | 40 | 84
10 | 12 | 40 | 62
13 | 20 | 50 | 83
正如其名,一共是現金,即席與該行的抵押品價值的總和。
我所需要的follwing輸出表
ChangeType | ChangeAmount
---------------------------
Cash | 12
Adhoc | -18
Cash | -22
Cash | 3
Adhoc | 8
Collateral | 10
這是階段1在下一階段中,一個叫的clientId新列是要添加,並且這些變化都被示出爲每個特定的客戶端。 假設客戶端1是第1行,客戶端2是第2和第3行,然後客戶端1又是第4行。然後,使用row1和row4形成client1的比較表。
輸出表將
ChangeType | ChangeAmount | ClientId
------------------------------------------
Cash | 7 | client1
Adhoc | -10 | client1
Collateral | 10 | client1
Cash | -22 | client2
我以
SELECT
CASE WHEN ((Cash - lag(Cash, 1)
OVER (PARTITION BY clientId
)) != 0)
THEN CAST('Cash' AS Text)
WHEN ((Adhoc - lag(Adhoc, 1)
OVER (PARTITION BY clientId
)) != 0)
THEN CAST('Adhoc' AS Text)
WHEN ((Collateral - lag(Collateral, 1)
OVER (PARTITION BY clientId
)) != 0)
THEN CAST('Collateral' AS Text)
END,
Total - lag(Total,1)
OVER (PARTITION BY clientId)
FROM money
但是我迷路了怎麼能達到什麼樣的換款時,「只有一列」的行之間變化顯示連續變化的多個列的更改。
這是一個不透明的特例。您可能需要做的是爲每一行的每一列生成更改記錄,然後過濾出更改爲零的那些記錄。 –
謝謝。在查詢層面完成unpivoting還是需要編寫soci C++代碼? –
如果在SQL級別上不實用,我會感到非常驚訝。提供可用的,完整的示例數據作爲CREATE TABLE和INSERT語句(最好是http://sqlfiddle.com),我會看一看,但我不想自己編寫虛擬數據。 –