如何在DB2中创建数据透视表?

问题描述 投票:0回答:1

我有一张桌子像:

| Date      | Week | Name   | No | Count |
|-----------|------|--------|----|-------|
| 2019/4/1  |  14  | John   | 1  | 1     |
| 2019/4/1  |  14  | Mary   | 2  | 1     |
| 2019/4/9  |  15  | Kevin  | 3  | 2     |
| 2019/4/9  |  15  | John   | 4  | 1     |
| 2019/4/9  |  15  | Jessie | 5  | 1     |
| 2019/4/18 |  16  | Kevin  | 6  | 1     |
| 2019/4/18 |  16  | John   | 7  | 1     |
| 2019/4/18 |  16  | Jessie | 8  | 2     |
| 2019/4/18 |  16  | Mary   | 9  | 3     |
| 2019/4/18 |  16  | Mary   | 10 | 1     |
| 2019/4/18 |  16  | Jessie | 11 | 1     |
| 2019/4/24 |  17  | Mary   | 12 | 1     |
| 2019/4/24 |  17  | Jessie | 13 | 1     |

我想要做的是计算每周人们的总数。并按总计数排序。

我知道GROUP BY可以实现这一点,我已经尝试过,但是无法理解。

这就是我的期望:

| Name   | 14 | 15 | 16 | 17 | Total |
|--------|----|----|----|----|-------|
| Mary   | 1  | 0  | 4  | 1  | 6     |
| Jessie | 0  | 1  | 3  | 1  | 5     |
| John   | 1  | 1  | 1  | 0  | 3     |
| Kevin  | 0  | 2  | 1  | 0  | 3     |
| Total  | 2  | 4  | 9  | 2  | 17    |

我能怎么做?

database db2 pivot
1个回答
2
投票
Select [Name] 
 ,sum(case when [Week] = 14 then [Count] else 0 end) as Week14
 ,sum(case when [Week] = 15 then [Count] else 0 end) as Week15
 ,sum(case when [Week] = 16 then [Count] else 0 end) as Week16
 ,sum(case when [Week] = 17 then [Count] else 0 end) as Week17
 ,sum([Count]) as Total
from [table]
group by [Name]
order by Total

我不确定您使用的是哪个版本的DB2(LUW / zOS / i),所以这是一般答案。可以使周数更灵活,但需要在数周内进行一定数量的硬编码。

© www.soinside.com 2019 - 2024. All rights reserved.