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

+0

궁극적으로 피벗을 찾고 있습니다. http://stackoverflow.com/questions/13579143/how-can-i-pivot-a-table-in-db2 – DanK

+0

@DanK 그래서 ** 피벗 **입니까? 그것은 문제의 절반이되었습니다. 나는 내가 뭘 하려는지 제대로 부르는 것을 모른다. 따라서 Google 검색은 다소 어려워집니다. 감사! – Chad

답변

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를 한 단계 끌어 올릴 필요는 없습니다. –