2010-04-24 65 views
0

我有以下數據,並使用SQL Server 2005開始時間和開始時間查詢

UserID UserName LogTime LogDate 
1  S   9:00 21/5/2010 
1  S   10:00 21/5/2010 
1  S   11:00 21/5/2010 
1  S   12:00 21/5/2010 
1  S   14:00 21/5/2010 
1  S   17:00 21/5/2010 

需要輸出爲: -

1  S  21/5/2010 9:00 21/5/2010 10:00 
1  S  21/5/2010 11:00 21/5/2010 12:00 
1  S  21/5/2010 14:00 21/5/2010 17:00 

我用了ROW_NUMBER函數查詢,但其示值誤差

+0

它看起來像你正在配對登錄/註銷。有沒有辦法判斷某一行是登錄還是退出? – Andomar 2010-04-24 17:43:53

+0

你能告訴我們你的代碼嗎?告訴我們究竟是什麼**錯誤是? – 2010-04-25 08:50:22

回答

1

我想知道是否有更多的問題比你說的。嚴格按照你提供的信息,下面的例子似乎工作。


DECLARE @YourTable TABLE(UserId int, UserName varchar(10), LogTime time, LogDate date) 

insert @YourTable values(1,'S','9:00','5/21/2010') 
insert @YourTable values(1,'S','10:00','5/21/2010') 
insert @YourTable values(1,'S','11:00','5/21/2010') 
insert @YourTable values(1,'S','12:00','5/21/2010') 
insert @YourTable values(1,'S','14:00','5/21/2010') 
insert @YourTable values(1,'S','17:00','5/21/2010'); 

WITH 
    [TableWithRowId] as 
    (SELECT ROW_NUMBER() OVER(ORDER BY UserId,LogDate,LogTime) RowId, * FROM @YourTable), 
    [OddRows] as 
    (SELECT * FROM [TableWithRowId] WHERE rowid % 2 = 1), 
    [EvenRows] as 
    (SELECT *, RowId-1 As OddRowId FROM [TableWithRowId] WHERE rowid % 2 = 0) 
SELECT 
    [OddRows].UserId, 
    [OddRows].UserName, 
    [OddRows].LogDate, 
    [OddRows].LogTime, 
    [EvenRows].LogDate, 
    [EvenRows].LogTime 
FROM 
    [OddRows] LEFT JOIN [EvenRows] 
    ON [OddRows].RowId = [EvenRows].OddRowId