日期:2014-05-17  浏览次数:20475 次

求教,一个关于SQL的问题
已知有某表结构和示例数据如下
姓名 月份 薪资
张三 一月 8000
张三 二月 9000 
张三 三月 7000
李四 一月 9000 
李四 二月 8800 
王五 一月 8700 
王五 二月 9000
王五 三月 5600
...
写出一条或多条SQL语句,查询得到以下形式的结果
姓名 一月 二月 三月 ...
张三 8000 9000 7000 
李四 9000 8800 null
王五 8700 9000 5600


------解决方案--------------------

select 
姓名,
max(case when 月份='一月' then 薪资 end) as [一月],
max(case when 月份='二月' then 薪资 end) as [二月],
max(case when 月份='三月' then 薪资 end) as [三月],
............
from 表
group by 姓名
------解决方案--------------------
select 姓名,
[一月]=max(case when 月份='一月' then 薪资 end),
[二月]=max(case when 月份='二月' then 薪资 end),
[三月]=max(case when 月份='三月' then 薪资 end)
from tb group by 姓名
------解决方案--------------------
SQL code
select
姓名,
max(case when 月份='一月' then 薪资 end) as [一月],
max(case when 月份='二月' then 薪资 end) as [二月],
max(case when 月份='三月' then 薪资 end) as [三月]
from 表
group by 姓名

------解决方案--------------------
SQL code

--行列转化

select 姓名,
max(case when 月份='一月' then 薪资 end) as [一月],
max(case when 月份='二月' then 薪资 end) as [二月],
max(case when 月份='三月' then 薪资 end) as [三月],
……
from 表 group by 姓名

------解决方案--------------------
SQL code

declare @sql varchar(8000) 
set @sql = 'select 姓名 ' 
select @sql = @sql + ' , max(case 月份 when ''' + 月份 + ''' then 薪资 else 0 end) [' + 月份 + ']' 
from (select distinct 月份 from 表) as a 
set @sql = @sql + ' from 表 group by 姓名' 
exec sp_executesql @sql