SQL查询实现行列互换
期初总人数 离职总人数 入职总人数 期末总人数
一月份476350
二月份014847
三月份500353
只要这个效果! SQL
[解决办法]
晕,你这个是结果还是原始数据?
[解决办法]
lz 看看这个资料吧
http://www.cnblogs.com/worfdream/articles/2409162.html
[解决办法]
--动态的
declare @tt nvarchar(4000)
select @tt=isnull(@tt+',','')+quotename([shoppName])
from shopp group by [shoppName]
exec('select [shoppID],'+@tt+',[总价格] from (select *,[总价格]=sum([price])over(partition by[shoppID])
from shopp)a pivot(max([price]) for [shoppName]in ('+@tt+'))b')
--结果
shoppID 饼干 凤爪 瓜子 面包 总价格
0123 12 44 32 10 108
0124 23 8 15 20 66
------字段替换一下 看是不是你要的 结果
[解决办法]
use Tempdb
go
--> -->
if not object_id(N'T') is null
drop table T
Go
Create table T([月份] nvarchar(3),[期初总人数] int,[离职总人数] int,[入职总人数] int,[期末总人数] int)
Insert T
select N'一月份',47,6,3,50 union all
select N'二月份',0,1,48,47 union all
select N'三月份',50,0,3,53
Go
declare @s nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000),@s4 nvarchar(4000)
select
@s=isnull(@s+',','declare ')+'@'+rtrim(Colid)+' nvarchar(4000)',
@s2=isnull(@s2+',','select ')+'@'+rtrim(Colid)+'='''+case when @s2 is not null then 'union all select' else ' select ' end+' [人数统计]='''+quotename(Name,'''')+'''''',
@s3=isnull(@s3,'')+'select @'+rtrim(Colid)+'=@'+rtrim(Colid)+'+'',''+quotename([月份])+''=''+quotename('+quotename(Name)+','''''''') from T ',
@s4=isnull(@s4+'+','')+'@'+rtrim(Colid)
from
syscolumns
where
id=object_id('T') and Name not in('月份')
--print @s+' '+@s2+' '+@s3+' exec('+@s4+')' 显示执行语句
exec(@s+' '+@s2+' '+@s3+' exec('+@s4+')')
/*
人数统计一月份二月份三月份
离职总人数610
期初总人数47050
期末总人数504753
入职总人数3483
*/