例子 :   
  表1 
       工号        日期         时间
       00000523 2007-10-12  17:31:49 
      00000523 2007-10-12  13:52:32
      00000523 2007-10-12  12:12:32
      00000523 2007-10-12  07:52:32 
   
    表2 
         工号       日期        时间1      时间2      时间3     时间4  
       00000523 2007-10-12  07:52:32  12:12:32  13:52:32  17:31:49  
   
 首先表1是已经存在的表,其中如果是 按日期查询有4行数据  
  我现在想做的也就是把表1的4行用1行数据来显示  (如表2所示)
   谢谢各位!

解决方案 »

  1.   

    declare @s varchar(8000)
    select *,px=(select count(1) from ta where a.工号 = 工号 and a.日期=日期 and 时间< a.时间)
     into tmp
    from ta  a
    select @s = Isnull(@s+',','') +'[时间'+ltrim(px)+'] = max(case when px = '+ltrim(px) + ' then 时间 else null end)'
    from tmp 
    exec('select 工号 ,日期,'+ @s+ ' from tmp group by 工号 ,日期')
      

  2.   

    参考一下哦CREATE   TABLE   tb(sN  varchar(20),process_id   int,data_id   int,measuredata   numeric(9,2)) 
    INSERT   tb   SELECT   '12770006 ',1,1,1.34 
    UNION  ALL   SELECT   '12770006 ',1,2,046 
    UNION  ALL   SELECT   '12770006 ',1,3,9.82   
    UNION  ALL   SELECT   '14061916 ',2,1,5.5 
    UNION  ALL   SELECT   '14061916 ',2,2,4.36 
    UNION  ALL   SELECT   '12770006 ',2,1,6.43 
    UNION  ALL   SELECT   '12770006 ',2,2,0.12   
    UNION  ALL   SELECT   '12770006 ',2,3,6.37   
    UNION  ALL   SELECT   '14061916 ',3,1,3.4 
    UNION  ALL   SELECT   '14061916 ',3,2,1.1 --查询处理 
    DECLARE   @s   nvarchar(4000) 
    --交叉报表处理代码头 
    SET   @s= 'SELECT   sn,process_id ' 
    --生成列记录水平显示的处理代码拼接(处理Item列) 
    SELECT   @s=@s 
    + ', '+QUOTENAME(data_id) 
    +N'=SUM(CASE   data_id   WHEN  '+QUOTENAME(data_id,N'''') 
    +N'   THEN  measuredata   END) ' 
    FROM   tb 
    GROUP   BY   data_id --拼接交叉报表处理尾部,并且执行拼接后的动态SQL语句 
    EXEC(@s+N' 
    FROM   tb 
    GROUP   BY   sn,process_id ')drop table tb
      

  3.   

    --drop table tb
    --drop table tmp
    CREATE   taBLE   tb(工号  varchar(20),日期   int ,时间 int) 
    INSERT   tb   SELECT   '12770006 ',1 , 2
    UNION  ALL   SELECT   '12770006 ',1 , 4
    UNION  ALL   SELECT   '12770006 ',1 , 4
    UNION  ALL   SELECT   '14061916 ',2 , 5
    UNION  ALL   SELECT   '14061916 ',2 , 6
    UNION  ALL   SELECT   '12770006 ',2 ,3 
    UNION  ALL   SELECT   '12770006 ',2 ,4 
    UNION  ALL   SELECT   '12770006 ',3 , 5
    UNION  ALL   SELECT   '14061916 ',3 , 7
    UNION  ALL   SELECT   '14061916 ',3 , 8--查询处理 
    declare @s varchar(8000)
    select *,data_id=(select count(1) from tb where a.工号 = 工号 and a.日期=日期 and 时间< a.时间)
     into tmp
    from tb  aselect * from tmp--查询处理 
    --DECLARE   @s   nvarchar(4000) 
    --交叉报表处理代码头 
    SET   @s= 'SELECT   工号,日期 ' 
    --生成列记录水平显示的处理代码拼接(处理Item列) 
    SELECT   @s=@s 
    + ', '+QUOTENAME(data_id) 
    +N'=SUM(CASE   data_id   WHEN  '+QUOTENAME(data_id,N'''') 
    +N'   THEN  时间   END) ' 
    FROM   tmp 
    GROUP   BY   data_id --拼接交叉报表处理尾部,并且执行拼接后的动态SQL语句 
    EXEC(@s+N' 
    FROM   tmp 
    GROUP   BY   工号,日期 ')