在SQL中,如何将行号()添加到from子句中的当前子查询中?
如上所述,我试图将此行编号查询作为子查询放入我的from子句中:在SQL中,如何将行号()添加到from子句中的当前子查询中?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如上所述,我试图将此行编号查询作为子查询放入我的from子句中: SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY CaseID) AS RowNum FROM T.dbo.CompletedCase ) AS MyDerivedTable WHERE MyDerivedTable.RowNum BETWEEN 0 AND 25 这就是我试图提出的问题 SELECT DISTINCT c.UserId, (
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY CaseID) AS RowNum
FROM T.dbo.CompletedCase
) AS MyDerivedTable
WHERE MyDerivedTable.RowNum BETWEEN 0 AND 25
这就是我试图提出的问题
SELECT DISTINCT c.UserId, (u.FirstName + ' ' + u.LastName) AS [UserName], Count(c.UserId +c.CaseId+c.LineNumber) AS [CompletedCase]
FROM T.dbo.CompletedCase c join T.dbo.User u on c.UserId = u.UserID
WHERE c.PrintDateTime >= '2014-01-27 7:00' AND c.PrintDateTime <= '2014-01-27 17:00'
Group By u.FirstName, u.LastName, c.UserId
Order By [UserName]
我见过不同的人如何将相似的东西应用到他们的身上,但我不知道如何在from子句中应用它。如果你能解释一些答案,我将不胜感激!如果在SELECT子句中有更好的方法来实现这一点,那么我将尝试它。对我来说,放在FROM子句中是有意义的,因为它就是从中提取行的。谢谢你的帮助。你应该能够做完全相同的事情,尽管我无法想象你想要完成什么:
Select *
From (
SELECT DISTINCT ROW_NUMBER() Over(Order By c.UserId) rn, c.UserId, (u.FirstName + ' ' + u.LastName) AS [UserName], Count(c.UserId +c.CaseId+c.LineNumber) AS [CompletedCase]
FROM T.dbo.CompletedCase c join T.dbo.User u on c.UserId = u.UserID
WHERE c.PrintDateTime >= '2014-01-27 7:00' AND c.PrintDateTime <= '2014-01-27 17:00'
Group By u.FirstName, u.LastName, c.UserId
) x
Where x.rn Between 0 and 25
Order By [UserName]
就我个人而言,我喜欢用CTE做这种事情:
;with cte as
(
SELECT DISTINCT ROW_NUMBER() Over(Order By c.UserId) rn
,c.UserId
,(u.FirstName + ' ' + u.LastName) AS [UserName]
,Count(c.UserId +c.CaseId+c.LineNumber) AS [CompletedCase]
FROM T.dbo.CompletedCase c
join T.dbo.User u
on c.UserId = u.UserID
WHERE c.PrintDateTime >= '2014-01-27 7:00' AND c.PrintDateTime <= '2014-01-27 17:00'
Group By u.FirstName, u.LastName, c.UserId
)
Select UserId
,UserName
,CompletedCase
From cte
Where rn Between 0 And 25
Order By [UserName]
但是,似乎您只需要前25行,那么为什么不:
SELECT DISTINCT Top 25, c.UserId, (u.FirstName + ' ' + u.LastName) AS [UserName], Count(c.UserId +c.CaseId+c.LineNumber) AS [CompletedCase]
FROM T.dbo.CompletedCase c join T.dbo.User u on c.UserId = u.UserID
WHERE c.PrintDateTime >= '2014-01-27 7:00' AND c.PrintDateTime <= '2014-01-27 17:00'
Group By u.FirstName, u.LastName, c.UserId
Order By [UserName]
我不完全明白你的意思。你想添加行号并限制第二次查询的结果吗?我需要前25行,然后是26-50行,这就是为什么我要这样做。你是什么意思?您运行一次查询以获得前25个,然后运行一个稍微不同的查询以获得26-50个?为什么?两张不同的桌子,我只是按照给我的指示走。是,运行1-25然后26-50的查询。你最上面的一个有效,但订单没有起作用。它说:ORDERBY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。我的错误。修复了按顺序移动到派生表/cte外部的前两个查询。