日期:2014-05-18  浏览次数:20433 次

行列转化的问题,高手请解决
delcare       @s       varchar(8000)      
set       @s= 'select       日期       '      
select       @s=@s+ ',[ '+城市+ ']=max(case       城市       when       ' ' '+城市+ ' ' '       then       温度       else       0       end) '      
from       (select       distinct       城市       from       城市对应表)       as       a      
set       @s=@s+ '       from       表       group       by       日期 '    
       
    exec(@s)      
如果:我要转化的是一个动态sql查询后的结果   应该如何做呢?采用全局临时表能够做,但是考虑到全局临时表   多人使用时候可能会“冲突”,所以请求帮助!

------解决方案--------------------
declare @sql nvarchar(4000)
set @sql = 'select 员工编号 '

select @sql = @sql + ',sum (case convert(nvarchar(1),[月]) when ' ' '+ convert(nvarchar(1),月) + ' ' ' then 奖金 else 0 end ) as [ ' + convert(nvarchar(1),月) + '月] '
from jj group by 月

select @sql = @sql + 'from (select * from jj )b group by 员工编号 '

exec(@sql)
--- 'from (select * from jj )b
这是动态查出来的.


------解决方案--------------------
--創建測試環境
create table holiday_type
(holiday_type Varchar(10),
holiday_type_name Nvarchar(20),
work_hour Numeric(10, 2))
Insert holiday_type Select 'A ', N '婚假 ', 8.00
Union All Select 'B ', N '产假 ', 8.00
Union All Select 'C ', N '丧假 ', 8.00
Union All Select 'D ', N '病假 ', 8.00
Union All Select 'E ', N 'tst ', 5.00

create table holiday_employees
(holiday_emp_seq Int,
emp_id Char(2),
start_day DateTime,
end_day DateTime,
holiday_type Varchar(10))
Insert holiday_employees Select 1, '01 ', '2007-08-01 00:00:00.000 ', '2007-08-02 00:00:00.000 ', 'A '
Union All Select 2, '01 ', '2007-08-07 00:00:00.000 ', '2007-08-09 00:00:00.000 ', 'B '
Union All Select 3, '01 ', '2007-08-12 00:00:00.000 ', '2007-08-20 00:00:00.000 ', 'C '
Union All Select 4, '02 ', '2007-08-12 00:00:00.000 ', '2007-08-20 00:00:00.000 ', 'C '
Union All Select 5, '03 ', '2007-08-12 00:00:00.000 ', '2007-08-20 00:00:00.000 ', 'C '
Union All Select 6, '03 ', '2007-08-01 00:00:00.000 ', '2007-08-03 00:00:00.000 ', 'A '
GO
--測試
Declare @S Varchar(8000)
Select @S = ' Select A.emp_id '
Select @S = @S + ', SUM(Case A.holiday_type When ' ' ' + holiday_type + ' ' ' Then B.work_hour * datediff(day, start_day, end_day) Else 0.0 End) As [ ' + holiday_type + '] '
F