Database 如何在DB2中创建透视表?
我有一张像这样的桌子:Database 如何在DB2中创建透视表?,database,db2,pivot,Database,Db2,Pivot,我有一张像这样的桌子: | 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 | Jo
| 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 |
我想做的是计算每周的总人数。
并按总数排序
我知道分组可以做到这一点,我试过了,但就是想不出来
这就是我所期望的:
| 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 |
我该怎么办
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),所以这是一个一般性的答案。周数可以变得更加灵活,但需要对周数进行一定量的硬编码
我不确定您使用的是哪个版本的DB2(LUW/zOS/I),所以这是一个一般性的答案。周数可以变得更加灵活,但需要对周数进行一定量的硬编码 你可以使用GROUP BY和横向连接从垂直方向到水平方向变换你的场你可以使用GROUP BY和横向连接从垂直方向到水平方向变换你的场汉克斯,它确实显示了我想要的。是的,每周的周数是不同的。那么,“一定量的硬编码”是什么意思呢?你可以根据需要使用
(week(Current_Date)-1)
或任何你需要的东西,使周数足够动态,以随周变化。硬编码将需要在您报告的周数(列数)内。在这种情况下,4周。你需要使整个声明动态化,并根据需要增加周数,或者将其硬编码。谢谢你的灵感。我用我的Delphi代码做的:)谢谢,它确实显示了我想要的。是的,每周的周数是不同的。那么,“一定量的硬编码”是什么意思呢?你可以根据需要使用(week(Current_Date)-1)
或任何你需要的东西,使周数足够动态,以随周变化。硬编码将需要在您报告的周数(列数)内。在这种情况下,4周。你需要使整个声明动态化,并根据需要增加周数,或者将其硬编码。谢谢你的灵感。我在我的Delphi代码中实现了:)