Sql server MSSQL-使用行号的一行中最低和第二最低
我一直在进行一项查询,以提供员工的第一次和第二次审核日期以及审核结果。下面的查询将此信息分为两行(第一行和第二行)。但是,我需要数据显示在一行中。以下是我现在的疑问:Sql server MSSQL-使用行号的一行中最低和第二最低,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我一直在进行一项查询,以提供员工的第一次和第二次审核日期以及审核结果。下面的查询将此信息分为两行(第一行和第二行)。但是,我需要数据显示在一行中。以下是我现在的疑问: SELECT EmployeeID,ReviewDate, ReviewResults FROM ( SELECT EmployeeID, ReviewDate, ReviewResults, MAX(case when RowNumber = 1 then ReviewDate end) as Lowest F
SELECT EmployeeID,ReviewDate, ReviewResults FROM
(
SELECT EmployeeID, ReviewDate, ReviewResults, MAX(case when RowNumber = 1 then ReviewDate end) as Lowest FROM
(
Select EmployeeID, a.ReviewDate, isnull(at.ReviewResults,'Not Completed') as ReviewResults,
ROW_NUMBER() OVER (PARTITION BY EmployeeID Order By ReviewDate) as RowNumber
FROM Employee p
LEFT JOIN Administration a on p.EmployeeID = a.ManagerID
LEFT JOIN AdminText at on a.ReviewID = at.ReviewID
GROUP BY p.EmployeeID, a.ReviewDate, at.ReviewResults
) as sub_inner
WHERE ReviewDate>=ISNULL(NULL,'1/1/1900')
And ReviewDate<dateadd(day,1,ISNULL(NULL,'1/1/3000'))
AND RowNumber Between 1 and 2
GROUP BY EmployeeID, ReviewDate, ReviewResults
) as sub_outer
GROUP BY EmployeeID, ReviewDate, ReviewResults
我想要的是:
ID Review Date1 Review Date2 ReviewResults1 ReviewResults2
---- ------------- ------------- ------------- --------------
1 2001-07-05 2001-07-28 No Change Raise
2 2001-07-23 2001-07-28 Promotion No Change
不知道如何达到这个效果?提前感谢。测试数据
DECLARE @TABLE TABLE (ID INT, [Review Date] DATETIME, ReviewResults VARCHAR(100))
INSERT INTO @TABLE VALUES
(1, '2001-07-05 07:45:00.000', 'No Change'),
(1, '2001-07-28 10:00:00.000', 'Raise'),
(2, '2001-07-23 10:00:00.000', 'Promotion'),
(2, '2001-07-28 12:45:00.000', 'No Change')
查询
;WITH CTE
AS (
-- You would use your above query here
SELECT ID, [Review Date], ReviewResults
, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY [Review Date]) rn
FROM @TABLE
)
SELECT C1.ID
,C1.[Review Date] AS [Review Date 1]
,C2.[Review Date] AS [Review Date 2]
,C1.ReviewResults AS [ReviewResults 1]
,C2.ReviewResults AS [ReviewResults 2]
FROM CTE C1 INNER JOIN CTE C2
ON C1.ID = C2.ID AND C1.rn +1 = C2.rn
结果集
╔════╦═════════════════════════╦═════════════════════════╦═════════════════╦═════════════════╗
║ ID ║ Review Date 1 ║ Review Date 2 ║ ReviewResults 1 ║ ReviewResults 2 ║
╠════╬═════════════════════════╬═════════════════════════╬═════════════════╬═════════════════╣
║ 1 ║ 2001-07-05 07:45:00.000 ║ 2001-07-28 10:00:00.000 ║ No Change ║ Raise ║
║ 2 ║ 2001-07-23 10:00:00.000 ║ 2001-07-28 12:45:00.000 ║ Promotion ║ No Change ║
╚════╩═════════════════════════╩═════════════════════════╩═════════════════╩═════════════════╝
能否显示预期输出中的第二行?您的查询将选择
ManagerID
。也添加该列。编辑以显示该列。我取出了管理器ID,结果集来自较新的查询运行,对此表示抱歉。谢谢
╔════╦═════════════════════════╦═════════════════════════╦═════════════════╦═════════════════╗
║ ID ║ Review Date 1 ║ Review Date 2 ║ ReviewResults 1 ║ ReviewResults 2 ║
╠════╬═════════════════════════╬═════════════════════════╬═════════════════╬═════════════════╣
║ 1 ║ 2001-07-05 07:45:00.000 ║ 2001-07-28 10:00:00.000 ║ No Change ║ Raise ║
║ 2 ║ 2001-07-23 10:00:00.000 ║ 2001-07-28 12:45:00.000 ║ Promotion ║ No Change ║
╚════╩═════════════════════════╩═════════════════════════╩═════════════════╩═════════════════╝