行列转换问题,急,谢谢
表1
部门名 年周 发注数 比率
001 20 1 10%
001 30 4 10%
001 40 5 10%
002 20 1 20%
002 40 1 20%
转化成表B
部门名 区分 20 30 40 统计
001 发注数 1 4 5 10
比率 10% 10% 10% 10%
002 发注数 1 0 1 2
比率 20% - 20% 20%
谢谢,拜托了
------解决方案--------------------create table 表1(部门名 varchar(10),年周 varchar(10),发注数 int,比率 varchar(10))
insert 表1
select '001 ', '20 ',1, '10% '
union select '001 ', '30 ',4, '10% '
union select '001 ', '40 ',5, '10% '
union select '002 ', '20 ',1, '20% '
union select '002 ', '40 ',1, '20% '
declare @sql varchar(8000),@sql1 varchar(8000)
select @sql= 'select * from (select 部门名, ' '发注数 ' ' as 区分 ',@sql1= ',cast(sum(发注数) as varchar) as 统计 from 表1 group by 部门名 union all select 部门名, ' '比率 ' ' as 区分 '
select @sql=@sql
+ ',cast(sum(case 年周 when '+cast(年周 as varchar)+ ' then 发注数 else 0 end) as varchar) as [ '+cast(年周 as varchar)
+ '] ',@sql1=@sql1+ ',isnull(max(case 年周 when '+cast(年周 as varchar)+ ' then 比率 end), ' '- ' ') as [ '+cast(年周 as varchar)+ '] '
from 表1 group by 年周
exec(@sql+@sql1+ ',max(比率) as 统计 from 表1 group by 部门名 ) t order by 部门名 ')
------解决方案--------------------select * into #t from
(
select 部門名, '發註數 'as '區分 ', sum(case when 年周=20 then 發註數 else 0 end)as '二十 ',
sum(case when 年周=30 then 發註數 else 0 end)as '三十 ',
sum(case when 年周=40 then 發註數 else 0 end)as '四十 ',
sum(發註數)as 統計
from t
group by 部門名
union
select 部門名, '比率 'as '區分 ',max(case when 年周=20 then 比率 else '- ' end)as 比率1,
max(case when 年周=30 then 比率 else '- ' end)as 比率2,
max(case when 年周=40 then 比率 else '- ' end)as 比率3,