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

这个行转列的SQL该如何改

2013-06-19 
这个行转列的SQL该怎么改?表结构我原本的SQLselectRecordTime ,[测点0]max(CASE WHEN [Spotid]0 THEN Re

这个行转列的SQL该怎么改?
表结构
这个行转列的SQL该如何改


这个行转列的SQL该如何改


我原本的SQL


select   RecordTime ,
[测点0]=max(CASE WHEN [Spotid]=0 THEN RecordValue else 0 end  ) ,
[测点1]=max(CASE WHEN [Spotid]=1 THEN RecordValue else 0 end  ) ,
[测点2]=max(CASE WHEN [Spotid]=2 THEN RecordValue else 0 end  ) 
from History_Record   group by RecordTime      


测试的时候数据随便弄的,但实际用的时候提示RecordValue不能将值nvarchar转为int 

这SQL是我网上搜的,自个改了下   求帮忙 SQL 行转列
[解决办法]
convert(int , RecordValue) 



[解决办法]
select   RecordTime ,
[测点0]=max(CASE WHEN [Spotid]=0 THEN cast(RecordValue  as int) else 0 end  ) ,
[测点1]=max(CASE WHEN [Spotid]=1 THEN cast(RecordValue  as int) else 0 end  ) ,
[测点2]=max(CASE WHEN [Spotid]=2 THEN cast(RecordValue  as int) else 0 end  ) 
from History_Record   
group by RecordTime      

[解决办法]
select   RecordTime ,
[测点0]=max(CASE WHEN [Spotid]=0 THEN convert(int,RecordValue) else 0 end  ) , 
[测点1]=max(CASE WHEN [Spotid]=1 THEN convert(int,RecordValue) else 0 end  ) , 
[测点2]=max(CASE WHEN [Spotid]=2 THEN convert(int,RecordValue) else 0 end  ) 
from History_Record    group by RecordTime  
[解决办法]
建个索引试试呢..

create index ix_History_Record on History_Record(RecordTime,Spotid,RecordValue)

[解决办法]
给个例子你参考下

12345678910111213141516171819202122 if exists(select 1 from sys.tables where name='test20130507') drop table test20130507 go create table test20130507(a varchar(20),b varchar(20),c varchar(20)) insert into test20130507 select '20130508','8:00~9:00','张三' union allselect '20130508','9:00~10:00','测试' union allselect '20130509','8:00~9:00','李四' union allselect '20130509','8:00~9:00','再测' union allselect '20130509','9:00~10:00','再测1' union allselect '20130609','9:00~10:00','再测1'go declare @sql varchar(max)=''select @sql=@sql+',max(case when a='''+a+''' then c else null end)as '''+a+''''  from (select distinct a from test20130507)a exec ('select b'+@sql+'  from (select distinct a,b, c=stuff((select '',''+c from test20130507 where a.a=a and a.b=b for xml path('''')),1,1,'''')   from test20130507 a)a group by b')  





[解决办法]

if exists(select 1 from sys.tables where name='test20130507')
drop table test20130507
go
create table test20130507(a varchar(20),b varchar(20),c varchar(20))
insert into test20130507
select '20130508','8:00~9:00','张三' union all
select '20130508','9:00~10:00','测试' union all
select '20130509','8:00~9:00','李四' union all
select '20130509','8:00~9:00','再测' union all
select '20130509','9:00~10:00','再测1' union all
select '20130609','9:00~10:00','再测1'
go
declare @sql varchar(max)=''
select @sql=@sql+',max(case when a='''+a+''' then c else null end)as '''+a+''''  
from (select distinct a from test20130507)a
exec ('select b'+@sql+' 
from (select distinct a,b,
c=stuff((select '',''+c from test20130507 where a.a=a and a.b=b for xml path('''')),1,1,'''')  
from test20130507 a)a group by b')

热点排行