使用UNION ALL和ORDER BY选择Top(某个数字)

The*_*uru 0 sql t-sql sql-server sql-server-2005

我试图拉回加载到表中的某些记录的前五个实例.重要的是要注意我试图从同一个表中得到我的结果,我认为有一个问题,我无法弄清楚这是一个表的事实.以下是我的查询示例:

Select * From (
Select Top 5 JobID From Jobs Where JobTypeID = 1 Order By JobID DESC
UNION ALL
Select Top 5 JobID From Jobs Where JobTypeID = 2 Order By JobID DESC
UNION ALL
Select Top 5 JobID From Jobs Where JobTypeID = 3 Order By JobID DESC
UNION ALL
Select Top 5 JobID From Jobs Where JobTypeID = 4 Order By JobID DESC
UNION ALL
Select Top 5 JobID From Jobs Where JobTypeID = 5 Order By JobID DESC
UNION ALL
Select Top 5 JobID From Jobs Where JobTypeID = 6 Order By JobID DESC
) As UnionTable
Run Code Online (Sandbox Code Playgroud)

当我运行这是SQL Server时,我只知道应该有30条记录.我怎样才能确保撤回所有正确的记录?我是否需要在每个子查询中使用Group By子句?

gbn*_*gbn 6

更优雅..

;WITH cte AS
(
    SELECT
         JobID, 
         ROW_NUMBER() OVER (PARTITION BY JobTypeID ORDER BY JobID /* eh? */ DESC) AS rank
    FROM
         Jobs WHERE JobTypeID BETWEEN 1 AND 6
)
SELECT * FROM CTE WHERE rank <= 5
Run Code Online (Sandbox Code Playgroud)

为什么JobID同时包含WHERE和ORDER?这使得ORDER BY子句毫无意义......