三张表 将查询出一列的内容 作为行标题 三张表为 TableA: TableB TableC
查询结果为 dataA
TableA:
ID UserID workid
1 U1 W1
2 U1 W2
3 U1 W1
4 U2 W2
5 U2 W2
TableB
UserID Username
pk1 王一
pk2 李二
pk3 赵三
TableC
workid workname
W1 卫生
W2 服务
W3 安全
查询出这样的结果集
dataA
Username W1 W2 W3
王一 2 1 0
李二 0 2 0
赵三 0 0 0
------解决思路----------------------
上面的错了
select B.Username,
sum(case when worid='W1' then 1 else 0 end) as W1,
sum(case when worid='W2' then 1 else 0 end) as W2,
sum(case when worid='W3' then 1 else 0 end) as W3
from (
select B.userId,B.Username,A.workid from TableB as B left join TableA as A on B.UserID=A.UserID
) c group by username
------解决思路----------------------
稍作修改
declare @sql varchar(500)
declare @courseStr varchar(300)
set @sql='select username'
set @courseStr=''
select @courseStr=@courseStr+',sum(case workid when '''+workid+''' then 1 then 0 end) as '+workid+' '
from (select distinct workid from TableC) C
set @sql=@sql+@courseStr+' from (select B.userId,B.Username,A.workid from TableB as B left join TableA as A on B.UserID=A.UserID) D group by username with rollup'
exec(@sql)