2011-09-13 47 views
0

大家好我試圖出去找我的表中的數據按我的要求.the數據的兩個數據合併到一個如下如何基於ID

mpCode in/outMode   date     time 
5001  0    12/09/2011 09:05:34 
5002  0    12/09/2011 09:33:13 
5001  1    12/09/2011 18:05:09 
5002  1    12/09/2011 17:44:34 

我希望得到我的作爲

empCode date    intime  outtime 
    5001  12/09/2011 09:05:34 18:05:09 
    5002  12/09/2011 09:33:13 17:44:34 
+5

你能告訴我們你試過的嗎 – Dotnet

+0

這裏有各種潛在的問題......如果outMode = 1失蹤怎麼辦?如果連續有兩個相同值的in /​​ outMode會怎樣?如果第二天出局(爲什麼日期和時間值分開存儲)呢? –

回答

0

輸出,無需額外的信息,一個GROUP BY可能是最容易:

SELECT empcode, 
     MAX([date]) as [date], 
     MAX(intime) as [intime], 
     MAX(outtime) as [outtime] 
FROM MyTable 
GROUP BY empcode 
0

如前所述aboved日有一些陷阱(比如沒有進/出,下一天出現),但是這正如你所描述的那樣。

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL 
DROP TABLE #tmp 

GO 

CREATE TABLE #tmp (EmpCode INT, InOutMode INT, [DATE] DATETIME, [TIME] DATETIME) 

GO 

INSERT #tmp (EmpCode,InOutMode,[Date],[TIME]) 

VALUES (5001,0,'12/09/2011','1/1/1900 09:05:34') 
,(5002,0, '12/09/2011','1/1/1900 09:33:13') 
,(5001, 1,'12/09/2011','1/1/1900 18:05:09') 
,(5002,1 ,'12/09/2011','1/1/1900 17:44:34'); 

WITH InTime (EmpCode,Date,Time) 
AS 
(
SELECT 
    EmpCode 
    ,DATE 
    ,TIME 
FROM #tmp 
WHERE InOutMode = 0 
) 

SELECT 
    t.EmpCode 
    ,t.[DATE] 
    ,i.[Time] 
    ,t.[Time] 
FROM #tmp AS t 
JOIN InTime AS i 
ON t.EmpCode = i.EmpCode 
    AND t.[Date] = i.[Date] 
WHERE t.InOutMode = 1