Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中,如何将行号()添加到from子句中的当前子查询中?_Sql_Sql Server_Tsql - Fatal编程技术网

在SQL中,如何将行号()添加到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, (

如上所述,我试图将此行编号查询作为子查询放入我的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, (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外部的前两个查询。