2014-09-30 37 views
0

我試圖減去兩列,然後計算有多少人有相同的差異,並將這些總和放入列中。總和是多少有-3個或更多,-2,-1,0,1,2,3或更多按日期分組的差異。將計數加總到由另一列分組的多個新列中

必須針對DB2數據庫執行查詢。

數據...

------------------------------ 
| Date  | Num 1 | Num 2 | 
------------------------------ 
| 2014-02-11 | 19872 | 19873 | 
| 2014-02-11 | 19873 | 19873 | 
| 2014-02-12 | 19875 | 19873 | 
| 2014-02-13 | 19870 | 19873 | 
| 2014-02-13 | 19872 | 19873 | 
| 2014-02-14 | 19877 | 19869 | 
| 2014-02-14 | 19873 | 19873 | 

所需的輸出...

----------------------------------------------------------------------- 
| Date  | <= -3 | -2 | -1 | 0 | +1 | +2 | >= +3 | 
----------------------------------------------------------------------- 
| 2014-02-11 |  0 | 0 | 0 | 1 | 1 | 0 | 0 | 
| 2014-02-12 |  0 | 1 | 0 | 0 | 0 | 0 | 0 | 
| 2014-02-13 |  0 | 0 | 0 | 0 | 1 | 0 | 1 | 
| 2014-02-14 |  1 | 0 | 0 | 1 | 9 | 0 | 0 | 
+0

你有沒有嘗試什麼嗎? – bfontaine 2014-09-30 16:24:53

+0

最終,你正在尋找一個關鍵:http://stackoverflow.com/questions/13579143/how-can-i-pivot-a-table-in-db2 – DanK 2014-09-30 16:30:19

+0

@丹克所以,這是一個**樞軸**?這是問題的一半。我只是不知道該怎樣正確地調用我想要做的事情。所以,這使得谷歌搜索很困難。謝謝! – Chad 2014-09-30 19:23:32

回答

2

試試這個:

select Date, 
 
sum(case when diff <= -3 then 1 else 0) AS [<=-3], 
 
sum(case when diff = -2 then 1 else 0) AS [-2], 
 
sum(case when diff = -1 then 1 else 0) AS [-1], 
 
sum(case when diff = 0 then 1 else 0) AS [0], 
 
sum(case when diff = 1 then 1 else 0) AS [+1], 
 
sum(case when diff = 2 then 1 else 0) AS [+2], 
 
sum(case when diff >= 3 then 1 else 0) AS [>=+3] 
 
from 
 
(select Date, Num1, Num2, (Num1-Num2) diff from TableA)TableB 
 
group by Date

+0

取決於優化器如何處理它,如果您在數據透視點之前進行聚合(即嵌套另一個級別),則這可能會運行得更好。至少,你實際上並不需要將'Num1' /'Num2'拉到下一層。 – 2014-10-04 07:26:45

相關問題