日期:2014-05-18  浏览次数:20528 次

联合查询按字段排序的交叉表问题
有两个表

Employee表格式如下:

id     number       name      
1       001             张三
2       002   李四
3       003   王五
...

WageList表格式如下:

id   wid   serial   caption   value
3       1         1           CC               30
3       1         2           BB               20
3       1         3           AA               10
1       1         1           CC               40
1       1         2           BB               30
1       1         3           AA               40
2       1         1           CC               20
2       1         2           BB               50
2       1         3           AA               10
3       2         1           CC               30
...

想得到如下交叉表个格式caption位置按serial字段排序:
id       number       name     CC       BB       AA   ...
1           001           张三     40       40       30
2           002           李四     20       50       10
3           003           王五     30       20       10

查询条件wid=1,这个交叉查询怎么写?




------解决方案--------------------
create table Employee(id int,number varchar(10),name varchar(20))
insert Employee select 1, '001 ', '张三 '
union all select 2, '002 ', '李四 '
union all select 3, '003 ', '王五 '

create table WageList(id int,wid int,serial int,caption varchar(10),value int)
insert WageList select 3,1,1, 'CC ',30
union all select 3,1,2, 'BB ',20
union all select 3,1,2, 'AA ',10

union all select 1,1,1, 'CC ',40
union all select 1,1,2, 'BB ',30
union all select 1,1,3, 'AA ',40

union all select 2,1,1, 'CC ',20
union all select 2,1,2, 'BB ',50
union all select 2,1,3, 'AA ',10
union all select 3,2,1, 'CC ',30

declare @sql varchar(8000)
set @sql = ' '
select @sql = @sql + ' ,sum(case caption when ' ' ' + caption + ' ' ' then value else 0 end) [ ' + caption + ']