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

SQL查询兑现行列互换

2013-06-25 
SQL查询实现行列互换期初总人数离职总人数 入职总人数 期末总人数一月份476350二月份014847三月份500353只

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
*/

热点排行
Bad Request.