你必須有一些東西來確定哪個列應該得到什麼值,所以你可以創建一個row_number,然後轉發這些數據。這裏是測試數據的一個例子。
DECLARE @UserLogins AS TABLE (LoginDateTime DATETIME, UserName VARCHAR(20))
INSERT INTO @UserLogins (LoginDateTime, UserName)
VALUES
(GETDATE(),'John Doe')
,(GETDATE() -1,'John Doe')
,(GETDATE() -2,'John Doe')
,(GETDATE() -3,'John Doe')
,(GETDATE() -4,'John Doe')
;WITH cteRowNum AS (
SELECT TOP (3)
UserName
,LoginDateTime
,RowNum = ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY LoginDateTime DESC)
FROM
@UserLogins
WHERE
UserName = 'John Doe'
ORDER BY
LoginDateTime DESC
)
SELECT
UserName
,[1] as [1st]
,[2] as [2nd]
,[3] as [3rd]
FROM
cteRowNum
PIVOT (
MAX(LoginDateTime)
FOR RowNum IN ([1],[2],[3])
) p
請注意SELECT TOP(3)和順序是沒有必要的我只是把它作爲一個限制器。如果登錄次數少於3次,則該次計數的列將爲空,超過3次則不顯示.....
缺少一些項目。哪個DBMS(SQL Server,MySQL,??)和版本。你還在尋找一個動態數據透視表(所有日期)還是僅僅前3個登錄? –