各位高人,现有考勤刷卡记录Table如下:
   ygbh(员工编号)      skrq(刷卡日期)           sksj(刷卡时间)
   100001               20060801                   0829
   100001               20060801                   1730
   100001               20060802                   0828
   100001               20060802                   1731
     .                   .                           .  
     .                   .                           .
     .                   .                           .
   100001               20060831                   0828
   100001               20060831                   1731
   100001               20060831                   2031
    领导要求报表如下:   员工编号 月份:    1号       2号      .... 28号  29号 30号    31号
   100001   200608    08:29     08:28    ....                     08:28
   100001   200608    17:30     17:31   ....                      17:31
   100001   200608     -         -                                20:31
     .                   .                           .  
     .                   .                           .
     .                   .                           .想请教能否只使用SQL 指令即可实现?或者在Delphi用那个标准控件较简单实现,而不需把记录放到前端一条条处理(因为刷资料实在太多,用前端效率太低)。

解决方案 »

  1.   

    declare @sql nvarchar(4000)
    select @sql=''
    select @sql=@sql+', case skrq when '''+skrq+''' then sksj  else '''' end  ['+skrq+']' from aa group by skrq
    select @sql='select ygbh '+@sql + '  from aa  '
    --print @sql
    exec( @sql )
      

  2.   

    如果不是特别考虑效率的话,一条SQL语句可以搞定select ygbh.ygbh,'200608',kq1,kq2,kq3...kq31 from (select distinct ygbh from 刷卡记录) ygbh
    left join (select ygbh,sksj as kq1 from 刷卡记录 where skrq='20060801') kq1 on ygbh.ygbh=kq1.ygbh
    left join (select ygbh,sksj as kq2 from 刷卡记录 where skrq='20060802') kq2 on ygbh.ygbh=kq2.ygbh
    ......
    left join (select ygbh,sksj as kq31 from 刷卡记录 where skrq='20060831') kq31 on ygbh.ygbh=kq31.ygbh
    但是可以肯定的是:你的数据需求设计本身就有问题!