求解一复杂问题
已经有数据库表,存放内容示例
id(编号) compName addDate addValue
1 cmp1 1 100
2 cmp1 2 332
3 cmp2 1 546
4 cmp4 3 450
5 cmp3 3 1000
....
现求一视图,结果为
编号 公司名称 一月份 二月份 三月份 ... 十二月 总计
1 cmp1 100 332
2 cmp2 无记录 2
.......
------解决方案--------------------select 公司名称,
sum(case when adddate = 1 then addvalue else 0 end) as '一月份 ',
sum(case when adddate = 2 then addvalue else 0 end) as '二月份 ',
sum(case when adddate = 3 then addvalue else 0 end) as '三月份 ',
sum(case when adddate = 4 then addvalue else 0 end) as '四月份 ',
sum(case when adddate = 5 then addvalue else 0 end) as '五月份 ',
sum(case when adddate = 6 then addvalue else 0 end) as '六月份 ',
sum(case when adddate = 7 then addvalue else 0 end) as '七月份 ',
sum(case when adddate = 8 then addvalue else 0 end) as '八月份 ',
sum(case when adddate = 9 then addvalue else 0 end) as '九月份 ',
sum(case when adddate = 10 then addvalue else 0 end) as '十月份 ',
sum(case when adddate = 11 then addvalue else 0 end) as '十一月份 ',
sum(case when adddate = 12 then addvalue else 0 end) as '十二月份 '
from tb
group by 公司名称
------解决方案--------------------Create View V_TEST
As
Select
compName As 公司名称,
SUM(Case addDate When 1 Then addValue Else 0 End) As 一月份,
SUM(Case addDate When 2 Then addValue Else 0 End) As 二月份,
SUM(Case addDate When 3 Then addValue Else 0 End) As 三月份,
SUM(Case addDate When 4 Then addValue Else 0 End) As 四月份,
SUM(Case addDate When 5 Then addValue Else 0 End) As 五月份,
SUM(Case addDate When 6 Then addValue Else 0 End) As 六月份,
SUM(Case addDate When 7 Then addValue Else 0 End) As 七月份,
SUM(Case addDate When 8 Then addValue Else 0 End) As 八月份,
SUM(Case addDate When 9 Then addValue Else 0 End) As 九月份,
SUM(Case addDate When 10 Then addValue Else 0 End) As 十月份,
SUM(Case addDate When 11 Then addValue Else 0 End) As 十一月份,
SUM(Case addDate When 12 Then addValue Else 0 End) As 十二月份
From
表
Group By
compName
GO
------解决方案--------------------行列转换加合计
例如有表A某些人每月消费数据如下:
id data month
001 11 1
001 12 2
001 13 3
001 14 4
001 15 5
001 16 6
001 17 7
001 18 8
001 19 9
001 110 10
001 111 11