如表1工号    考勤时间
A001     8:00
A001    12:00
A001    13:00
A001    18:00
B001     8:00
B001    12:00
B001    13:00
B001    18:00如何处理会变成以下表2工号   考勤时间1 考勤时间2 考勤时间3 考勤时间4
A001   8:00      12:00     13:00    18:00
B001   8:00      12:00     13:00    18:00

解决方案 »

  1.   

    --> --> (Roy)生成測試數據
     
    if not object_id('Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([工号] nvarchar(4),[考勤时间] Datetime)
    Insert #T
    select N'A001','8:00' union all
    select N'A001','12:00' union all
    select N'A001','13:00' union all
    select N'A001','18:00' union all
    select N'B001','8:00' union all
    select N'B001','12:00' union all
    select N'B001','13:00' union all
    select N'B001','18:00'
    GoDECLARE @s NVARCHAR(4000),@i NVARCHAR(3)Select TOP 1 @i=COUNT(*),@s='' from #T GROUP BY 工号 order by count(*) descWHILE @i>0
        SELECT @s=N',[考勤'+@i+']=max(case when Row='+@i+N' then convert(varchar(5),考勤时间,108) end)'+@s,@i=@i-1
    EXEC(N'SELECT 工号'+@s+N'
    FROM (select *, row=row_number()over(partition by 工号 order by 工号)from #T) as a
    GROUP BY 工号')
    go
    /*
    工号 考勤1 考勤2 考勤3 考勤4
    A001 08:00 12:00 13:00 18:00
    B001 08:00 12:00 13:00 18:00
    */
      

  2.   

    本帖最后由 roy_88 于 2011-11-27 10:05:40 编辑
      

  3.   

    本帖最后由 roy_88 于 2011-11-27 11:01:46 编辑