2013-06-12 64 views
0

我有一個表格,其狀態爲1 & 2. 如果狀態爲1,則它在logIn Time中,如果狀態爲2,則它是登錄時間。如何將兩行合併爲一個以檢查狀態

所以我想顯示日誌在&用戶的時間。如果它沒有註銷時間,則列值應該爲空。

這裏是一個Sample Demo對錶結構和查詢......

我可以顯示所有的登錄時間退出時間......

我想要的輸出如:

CLOCKIN  CLOCKOUT 
9:25:41 AM 9:30:41 AM 
9:35:41 AM 9:40:41 AM 
9:45:41 AM 
10:06:33 AM 2:59:51 PM 

回答

1

您可以用幾個相關子查詢的做到這一點:

SELECT CONVERT(NVARCHAR(20),cin.logtime,108) AS CLOCKIN 
     ,CONVERT(NVARCHAR(20),(SELECT MIN(cout.logtime) 
           FROM table1 cout 
           WHERE cin.logtime < cout.logtime 
           AND cout.statusId = 2 
           AND NOT EXISTS (SELECT * FROM table1 cin2 
               WHERE cin2.logtime > cin.logtime 
               AND cin2.logtime < cout.logtime 
               AND cin2.statusId = 1 
               ) 
           ),108) AS CLOCKOUT 
FROM table1 cin 
WHERE cin.statusId = 1 

最外層的查詢獲取所有checkings,第一子查詢(外)獲得checkin後的最小結賬,以及第二個子查詢(最內層)如果之後出現checkin,只需要cheks - 在第三行替換爲NULL而不是重複14:59

SQLFiddle Demo

+0

它工作正常....非常感謝... – Renuka

0

使用樣式22 CONVERT功能:

select convert (varchar (20), cast (getdate() as time) , 22) 

或剛剛插入代碼如下:

convert (varchar (20), cast (rt.rt.logTime as time), 22) 
,convert (varchar (20), cast (rt1.rt.logTime as time), 22)