Как я могу использовать общее табличное выражение

StackOverflow https://stackoverflow.com/questions/1801976

Вопрос

Я использую общее табличное выражение для подкачки:

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

Сразу после выполнения этого запроса я выполняю почти идентичный запрос, чтобы получить общее количество элементов:

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

Я попытался объединить их вместе (то есть: определить CTE, запросить данные, а затем запросить счетчик, но когда я это сделаю, я получаю сообщение об ошибке "Недопустимое имя объекта" query "" в ответ на запрос второй запрос (граф).

Есть ли способ объединить эти два запроса в один, чтобы сохранить обратную передачу в БД?

Это было полезно?

Решение

Если вы не запрашиваете их в 2 разных запросах, попробуйте

;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

Если вам требуется 2 разных запроса, лучше используйте таблицу var

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
scroll top