[DataTime] RoomID Value Mark
2008年4月4日9:23 0 100 ID00
2008年4月4日9:23 0 11 ID01
2008年4月4日9:23 3 99 ID30
2008年4月4日9:23 4 43 ID20
2008年4月4日9:23 4 80 ID21
我要返回的表结构是(假如RoomID=0)
[DataTime] RoomID ID00 ID01
2008年4月4日9:23 0 100 11如何实现 ?
2008年4月4日9:23 0 100 ID00
2008年4月4日9:23 0 11 ID01
2008年4月4日9:23 3 99 ID30
2008年4月4日9:23 4 43 ID20
2008年4月4日9:23 4 80 ID21
我要返回的表结构是(假如RoomID=0)
[DataTime] RoomID ID00 ID01
2008年4月4日9:23 0 100 11如何实现 ?
set @sql='select [Datetime],RoomID'
select @sql=@sql+',max(case when Mark='''+Mark+''' then Value else '''' end) ['+Mark+']'
from tb_name group by Markexec (@sql+' from tb_name group by [Datetime],RoomID')
set @sql='select [Datetime],RoomID'
select @sql=@sql+',max(case when Mark='''+Mark+''' then Value else '''' end) ['+Mark+']'
from tb_name where RoomID=0 group by Mark exec (@sql+' from tb_name where RoomID=0 group by [Datetime],RoomID')
insert into tb values('2008年4月4日9:23' , 0 , 100, 'ID00')
insert into tb values('2008年4月4日9:23' , 0 , 11 , 'ID01')
insert into tb values('2008年4月4日9:23' , 3 , 99 , 'ID30')
insert into tb values('2008年4月4日9:23' , 4 , 43 , 'ID20')
insert into tb values('2008年4月4日9:23' , 4 , 80 , 'ID21')
godeclare @roomid as int
set @roomid = 0declare @sql varchar(8000)
set @sql = 'select [DataTime] , RoomID '
select @sql = @sql + ' , max(case Mark when ''' + Mark + ''' then Value else 0 end) [' +Mark + ']'
from (select distinct Mark from tb where roomid = @roomid) as a
set @sql = @sql + ' from tb where roomid = ' + cast(@roomid as varchar) + ' group by [DataTime] , RoomID'
exec(@sql) drop table tb/*
DataTime RoomID ID00 ID01
-------------------- ----------- ----------- -----------
2008年4月4日9:23 0 100 11
*/