求教,一个关于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 姓名
[解决办法]
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) as [一月],max(case when 月份='二月' then 薪资 end) as [二月],max(case when 月份='三月' then 薪资 end) as [三月],……from 表 group by 姓名
[解决办法]
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