2015-07-10 11 views
0

這裏是我的表:我想行轉換爲使用數據透視列,但它不是讓我聚集在兩個不同的列

Day CheckIn CheckOut Employee Id 
------------------------------------ 
Sun 09:00 10:00  1 
Sun 11:00 13:00  1 
Mon 08:00 11:00  1 
Mon 14:00 16:00  1 

我找下面的輸出:

SunCheckIn SunCheckOut MonCheckIn MonCheckOut 
----------------------------------------------------- 
09:00  10:00  08:00  11:00 
11:00  13:00  14:00  16:00 

我嘗試使用連接,但沒有任何幫助。任何人都可以幫助我嗎?

+0

你好Saranya。提問前請訪問http://stackoverflow.com/help/how-to-ask。歡迎來到堆棧溢出! –

回答

1

您所需的輸出不太適合SQL。你可以產生,但你基本上在列中有兩個列表。換句話說,這些排並不意味着什麼。

您可以通過使用row_number()枚舉行,然後使用條件聚合得到它:

select max(case when day = 'Sun' then CheckIn end) as SunCheckIn, 
     max(case when day = 'Sun' then CheckOut end) as SunCheckOut, 
     max(case when day = 'Mon' then CheckIn end) as MonCheckIn, 
     max(case when day = 'Mon' then CheckOut end) as MonCheckOut  
from (select t.*, 
      row_number() over (partition by day order by checkin) as seqnum 
     from table t 
    ) t 
group by seqnum 
order by seqnum; 
1

你可以寫爲:

;with CTE as 
(select Day,CheckIn,CheckOut, EmployeeId, 
Row_Number() over (partition by Day,EmployeeId order by CheckIn,CheckOut) as rownum 
from test 
) 
select T.EmployeeId, 
     T.CheckIn as 'SunCheckIn' , 
     T.CheckOut as 'SunCheckOut' , 
     T1.CheckIn as 'MonCheckIn', 
     T1.CheckOut as 'MonCheckOut' 
from CTE as T 
Left join CTE as T1 on T.EmployeeId = T1.EmployeeId 
and T.rownum = T1.rownum and T.Day <> T1.Day and T1.Day = 'Mon' 
where T.Day = 'Sun' 

Demo

相關問題