这是一个考勤,用户用客户端,每个人上午写入一行,下午写入一行,一天写入两行值(按时间写入不同的列值就好了)
现在希望整理后得到,按照ID、日期顺序的考勤表,每天有上下午,在一行。
第一个表上下午的值0,1是记录上下午的,0是上午,1是下午... ...
调整后上午下午的时间值并不在一个列里,而是两个列.
求大神~

解决方案 »

  1.   

    语句:
    --测试数据
    IF not object_ID('#A') is null
        drop table #A
    Go
    CREATE TABLE #A
        (
          姓名 NVARCHAR(100) ,
      人员Id INT,
      日期 NVARCHAR(100),
      上下午 INT,
      时间 NVARCHAR(100)
        )
    Insert #A
    select 'aa',123,'20160101',0,'8:25' UNION ALL 
    select 'aa',123,'20160101',1,'17:02' UNION ALL 
    select 'b',2546,'20160101',0,'8:12' UNION ALL 
    select 'b',2546,'20160101',1,'17:22' UNION ALL 
    select 'c',308,'20160101',0,'8:20' UNION ALL 
    select 'c',308,'20160101',1,'17:00' UNION ALL 
    select 'aa',123,'20160102',0,'8:02' UNION ALL 
    select 'aa',123,'20160102',1,'17:00' --测试数据结束--读取语句
    SELECT  姓名 ,
            人员Id ,
            日期 ,
            MAX(CASE WHEN 上下午 = 0 THEN 时间
                     ELSE NULL
                END) AS 上午 ,
            MAX(CASE WHEN 上下午 = 1 THEN 时间
                     ELSE NULL
                END) AS 下午
    FROM    #A
    GROUP BY 姓名 ,
            人员Id ,
            日期--删除临时表
    DROP TABLE #A结果: