Инструкция SQL WITH, неизвестный столбец в предложении where - PullRequest
2 голосов
/ 13 января 2010

Я получил следующий запрос, выдающий следующую ошибку

Неизвестный столбец 'RowNum'

WITH Employees AS
(
SELECT
   (keyTblSp.RANK * 3) AS [Rank],
    sp.*,
    addr.Street,
    addr.PostOfficeBox,
    addr.StreetNumber
FROM Employee sp    
    INNER JOIN 
        FREETEXTTABLE(Employee, *, 'something', 1000) AS keyTblSp
        ON sp.EmployeeId = keyTblSp.[KEY]    
    LEFT OUTER JOIN [Address] addr ON addr.EmployeeId = sp.EmployeeId 
UNION ALL
SELECT
    (keyTblAddr.RANK * 2) AS [Rank],
    sp.*,
    addr.Street,
    addr.PostOfficeBox,
    addr.StreetNumber
FROM Employee sp    
    LEFT OUTER JOIN [Address] addr ON addr.EmployeeId = sp.EmployeeId 
    INNER JOIN 
        FREETEXTTABLE([Address], *, 'something', 1000) AS keyTblAddr
        ON addr.AddressId = keyTblAddr.[KEY]
)

SELECT ROW_NUMBER() OVER (ORDER BY [Rank] DESC) AS RowNum, *
FROM Employees
WHERE RowNum BETWEEN (1 - 1) * 10 + 1 AND 1 * 10
ORDER BY Rank DESC

Ответы [ 4 ]

5 голосов
/ 13 января 2010

Это потому, что псевдонимы не распознаются в предложениях WHERE. Вместо этого используйте полный запрос следующим образом:

WHERE ROW_NUMBER() OVER (ORDER BY [Rank] DESC) BETWEEN (1 - 1) * 10 + 1 AND 1 * 10

3 голосов
/ 13 января 2010

Попробуйте свернуть запрос, чтобы получить имя, пригодное для использования в предложении where

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY [Rank] DESC) AS RowNum , * FROM Employees) AS Results WHERE RowNum BETWEEN (1 - 1) * 10 + 1 AND 1 * 10 ORDER BY Rank

2 голосов
/ 13 января 2010

Ваше предложение WHERE не может ссылаться на оконную или агрегатную функцию, например ROW_NUMBER().Если вы хотите отфильтровать результат ROW_NUMBER(), вам нужно сделать это в предложении HAVING:

...
SELECT ROW_NUMBER() OVER (ORDER BY [Rank] DESC) AS RowNum, *
FROM Employees
HAVING RowNum BETWEEN (1 - 1) * 10 + 1 AND 1 * 10    
ORDER BY Rank DESC    
0 голосов
/ 13 января 2010

Как насчет:

выберите топ 10 * от сотрудников порядок по рангу Desc

Кроме того, работает ли он без предложения where rownum. (почему у тебя такой хитрый?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...