当前位置: 代码迷 >> Sql Server >> 求一条sql 语句 小弟我觉得有难度 求解
  详细解决方案

求一条sql 语句 小弟我觉得有难度 求解

热度:25   发布时间:2016-04-24 09:46:35.0
求一条sql 语句 我觉得有难度 求解

三张表 将查询出一列的内容 作为行标题  三张表为 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 userid

上面的错了

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

------解决思路----------------------
引用:
Quote: 引用:

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 userid,username'
exec(@sql)
这条是动态sql。



如果在结果集dataA 最后一行 求出每一列的和 好算吗 高手

稍作修改

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)
  相关解决方案