解决方案 »

  1.   

    因为换了地址之后ase  when CONVERT(varchar(50),c.AttTime,8) between z.amstart and z.amend xxx这段就不符合case 逻辑,所以走else部分。图片地址肯定between and不了吧。
      

  2.   


    case when 满足条件后不是用 then 后面的做成查询结果吗,我并没把他between啊
      

  3.   

    select a.UserName,
    MAX(case  when CONVERT(varchar(50),c.AttTime,8) between z.amstart and z.amend then  ‘~/images/tb1.png ’ when  CONVERT(varchar(50),c.AttTime,8) between z.amlate and z.amlated then '迟到' else '未签到' end)as 上午上班
    from zhiduiTime as z,UserInfo as a left join usergx as b on a.PIN=b.userid
    left join att_record as c on a.PIN=c.EnrollNumber and CONVERT(varchar(50),c.AttTime,23)='2014-09-15'
    where b.partoid=1
    group by a.UserName你是说这样之后变成了第二个图的样子?
      

  4.   

      SELECT a.username,
             -- 格式化一下
             -- 这是在 '正常','迟到','未签到' 中求 MAX(),什么逻辑?
             MAX(CASE 
                   WHEN CONVERT(VARCHAR(50),c.atttime,8) BETWEEN z.amstart AND z.amend THEN '正常'
                   WHEN CONVERT(VARCHAR(50),c.atttime,8) BETWEEN z.amlate AND z.amlated THEN '迟到'
                   ELSE '未签到'
                 END) AS 上午上班
        FROM zhiduitime AS z,
             userinfo AS a
             LEFT JOIN usergx AS b
               ON a.pin = b.userid
             LEFT JOIN att_record AS c
               ON a.pin = c.enrollnumber
                  AND CONVERT(VARCHAR(50),c.atttime,23) = '2014-09-15'
       WHERE b.partoid = 1
    GROUP BY a.username
    --合理的逻辑应该是下面这样,那样你怎么改文本都没关系了。
             CASE 
               WHEN CONVERT(VARCHAR(50),MAX(c.atttime),8) BETWEEN z.amstart AND z.amend THEN '正常'
               WHEN CONVERT(VARCHAR(50),MAX(c.atttime),8) BETWEEN z.amlate AND z.amlated THEN '迟到'
               ELSE '未签到'
             END AS 上午上班
      

  5.   


    问题解决了,谢谢,虽然和你的解决方法有点不同,这Max不是求时间的最大值,而是求结果正常、迟到、未签到,如果换成~images/tb1.png后,最大值变为了未签到,是因为’tb1.png‘有数字,他会去比较大小,结果是未签到比tb1来的大,去掉数字就能正常显示了。