2014-09-30 34 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

相关问题