[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如何实现 ?

解决方案 »

  1.   

    declare @sql varchar(8000)
    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')
      

  2.   

    declare @sql varchar(8000) 
    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')
      

  3.   

    create table tb([DataTime] varchar(20), RoomID int, Value int, Mark varchar(10))
    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
    */