首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求教,一个关于SQL的有关问题

2012-10-19 
求教,一个关于SQL的问题已知有某表结构和示例数据如下姓名 月份 薪资张三 一月 8000张三 二月 9000张三 三

求教,一个关于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 

热点排行