Frage

Ich bin mit einem Common Table Expression Blätter:

with query as (
  Select Row_Number() over (Order By OrderNum ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
)
Select * from query where TableRowNum between 1 and 25 Order By TableRowNum ASC

Unmittelbar nach dieser Abfrage machen, mache ich eine fast identische Abfrage machen, um die Gesamtzahl der Elemente abzurufen:

with query as (
  Select Row_Number() over (Order By OrderNum ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
)
Select Count(*) from query

Ich habe versucht, diese zusammen kombiniert (dh den CTE definieren, die Daten abzufragen und dann die Count-Abfrage, aber wenn ich das tue, erhalte ich eine Fehlermeldung „Ungültige Objektnamen‚query‘“ als Antwort die die zweite Abfrage (Graf).

Gibt es eine Möglichkeit, diese beiden Abfragen in eine zu kombinieren, eine Hin- und Rückfahrt in die DB zu speichern?

War es hilfreich?

Lösung

Wenn Sie nicht über sie in 2 verschiedenen Anfragen benötigen, können Sie versuchen

;with query as (
  Select Row_Number() over (Order By UserID ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
),
totalCount AS (
    SELECT COUNT(1) Total FROM query
)
Select  query.*,
        Total
from    query, totalCount 
where   TableRowNum 
between 1 and 25 
Order By TableRowNum ASC

Wenn Sie benötigen tun 2 verschiedene Abfragen, sondern eine Tabelle var verwenden

DECLARE @User TABLE(
        TableRowNum INT,
        FirstName VARCHAR(50),
        LastName VARCHAR(50)
)
;with query as (
  Select Row_Number() over (Order By UserID ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
)
INSERT INTO @User
SELECT  TableRowNum,
        FirstName,
        LastName
FROM    query

SELECT  *
FROM    @User
where   TableRowNum 
between 1 and 25 
Order By TableRowNum ASC

SELECT COUNT(1) FROM @User

Andere Tipps

Sie können das tun, wie folgt:

with query as (
   Select 
 COUNT (*) OVER (PARTITION BY 1) AS TableTotalRows,
 Row_Number() over (Order By OrderNum ASC) as TableRowNum,
     FirstName,
     LastName
  From   Users
)

Laut Microsoft in diesem Link :

  

Ein CTE kann selbst verweisen und zuvor definiert CTEs im gleichen   WITH-Klausel.

In diesem neuen CTE Referenzierung der vorherigen CTE definiert sind, können wir die Zählung Abfrage machen:

;with query as (
  Select Row_Number() over (Order By UserID ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
),
totalCount AS (
    SELECT COUNT(1) Total FROM query
)
Select  query.*,
        Total
from    query, totalCount 
where   TableRowNum 
between 1 and 25 
Order By TableRowNum ASC

‚query‘ ist der Haupt CTE und ‚totalcount‘ nutzt es für bekommen die gesamten Reihen zählen

Microsoft sollte ein Beispiel für eine gemeinsame Aufgabe wie diese hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top