Используя функцию рейтинга получил столбец в где пункт (SQL Server 2008)

Если Вы действительно имеете Вам, может также загрузить JAR во времени выполнения с:

this.getClass().classLoader.rootLoader.addURL(new File("file.jar").toURL())
8
задан marc_s 6 December 2014 в 20:24
поделиться

2 ответа

Вы должны переместить оператор WHERE выше списка проектов, в котором создается столбец RowNumber. Используйте производную таблицу или CTE:

SELECT * 
  FROM (
   SELECT *, ROW_NUMBER() OVER (...) as RowNumber
   FROM ...) As ...
 WHERE RowNumber = ...

эквивалент CTE:

WITH cte AS (
SELECT *, ROW_NUMBER() OVER (...) as RowNumber
       FROM ...)
SELECT * FROM cte 
WHERE RowNumber = ...   
17
ответ дан 5 December 2019 в 07:35
поделиться

Оконные функции (из которых ROW_NUMBER является наиболее известной) заполняются очень поздно в запросе, хорошо после предложения WHERE. Следовательно, вам нужно вложить и его, чтобы фильтровать по нему:

SELECT *
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY Date_Time DESC) AS RowNumber, *
    FROM
    ( SELECT T.A_ID, T.User_Name, T.Date_Time, T.Value,
             U.ID, U.Name, U.Field1, U.Field2,
             COUNT(U.ID) OVER () AS TotalRows
      FROM 
        TeeTable as T INNER JOIN YouTable AS U
        ON T.U_ID = U.ID
        WHERE T.Value BETWEEN 222 AND 225
    ) Numbered
)  Filtered
WHERE RowNumber BETWEEN 1 AND 5

Вы также можете поместить их в CTE или представления, чтобы получить тот же эффект.

5
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: