使用Pivot表的Mysql查询

时间:2017-07-14 07:35:04

标签: mysql pivot

我有ff。数据..

    empID    Login Date    TimeIN    TimeOut    
    1001     01/01/2017    08:00     17:00  
    1001     01/02/2017    07:59     17:02  
    1001     01/03/2017    07:54     17:05  
    1001     01/04/2017    08:00     17:04  
    1001     01/05/2017    07:56     17:03  
    1001     01/06/2017    07:52     17:01    
    1001     01/07/2017    07:53     17:02  

我希望输出是这样的......

    EmpID   mon           tue          wed           thu            fri   
    1001    08:00-17:00   7:59-17:02   07:54-17:05   08:00-17:04    07:56-17:03  

我尝试使用此查询..

    select cEmpID,dDate,   
    (case DAYOFWEEK(dDate) WHEN 1 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Mon',
    (case DAYOFWEEK(dDate) WHEN 2 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Tue',
    (case DAYOFWEEK(dDate) WHEN 3 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Wed',
    (case DAYOFWEEK(dDate) WHEN 4 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Thu',
    (case DAYOFWEEK(dDate) WHEN 5 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Fri',
    (case DAYOFWEEK(dDate) WHEN 6 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Sat',
    (case DAYOFWEEK(dDate) WHEN 7 then CONCAT(cIn1,' - ',cOut2) else '' End) as 'Sun'  
    from tblattenddetail  
    Where cPeriodID='201702'
    GROUP BY cEmpID  

但它不起作用..

1 个答案:

答案 0 :(得分:0)

请尝试以下查询 -

SELECT empID,  
       MAX(case DAYOFWEEK(`Login Date`) WHEN 1 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Mon',
       MAX(case DAYOFWEEK(`Login Date`) WHEN 2 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Tue',
       MAX(case DAYOFWEEK(`Login Date`) WHEN 3 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Wed',
       MAX(case DAYOFWEEK(`Login Date`) WHEN 4 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Thu',
       MAX(case DAYOFWEEK(`Login Date`) WHEN 5 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Fri',
       MAX(case DAYOFWEEK(`Login Date`) WHEN 6 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Sat',
       MAX(case DAYOFWEEK(`Login Date`) WHEN 7 then CONCAT(TimeIN,' - ',TimeOut) else '' End) as 'Sun'  
FROM login
GROUP BY empID

以下是供您参考的小提琴 - http://www.sqlfiddle.com/#!9/437e5/5