日期:2014-05-19  浏览次数:20501 次

求一简单实用的SQL语句
有这样3张表
1、部门表
departID   departName
1                         部门A
2                         部门B
...
...

2、片区表
areaID       areaName
1                         浙江
2                         安徽
...
...

3、客流量
fluxID     flux       areaID   departID
1                 100           1               1
2                 200           1               2
3                 300           2               1
4                 400           2               2


想要得到的结果集如下:

第一列       第2列       第3列     (随着片区的记录数递增)

null             浙江         安徽
部门A           100           300
部门B           200           400


求一SQL



------解决方案--------------------
Declare @S Varchar(1000)
Select @S = 'Select A.departName As 部门 '
Select @S = @S + ', SUM(Case C.areaName When ' ' ' + areaName + ' ' ' Then B.flux Else 0 End) As [ ' + areaName + '] '
From 片区表 Order By areaID
Select @S = @S + ' From 部门表 A Left Join 客流量 B On A.departID = B.departID Left Join 片区表 C On B.areaID = C.areaID Group By A.departName '
EXEC(@S)
------解决方案--------------------
declare @sql varchar(8000)
set @sql= ' '

select @sql=@sql+ ',[ '+areaName+ ']=sum(case areaID when '+rtrim(areaID)+ ' then flux else 0 end) ' from 片区表 group by areaID,areaName

set @sql= 'select a.departName '+@sql+ ' from 部门表 a,客流量 b where a.departID=b.departID group by departName '

exec(@sql)