2014-01-23 5 views
1

Я пытаюсь выполнить следующий SQL запрос на базу данных Northwind:Выполнение заказа по на колонке псевдонима

SELECT * FROM (
    SELECT DISTINCT ROW_NUMBER() OVER (ORDER BY Joinning DESC) rownum, 
    LastName, Country, HireDate AS Joinning 
    FROM Employees 
    WHERE Region IS NOT NULL 
    ) r 

Это дает мне ошибку:

Invalid column name 'Joinning'. 

«RowNumber» требуется для пагинацией.

Может кто-нибудь предложить, как я могу сортировать по псевдониму соединения с генерируемым рулоном?

-А возможная работа вокруг

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

SELECT ROW_NUMBER() OVER (ORDER BY Joinning DESC) rownum,* FROM (
    SELECT 
    LastName, Country, HireDate AS Joinning 

    FROM Employees 
    WHERE Region IS NOT NULL 
    ) r 

--to положил дальше где положение на номер строки (то, что я хотел сделать для пагинацией):

With myres as(
    SELECT ROW_NUMBER() OVER (ORDER BY Joinning DESC) rownum,* FROM (
    SELECT 
     LastName, Country, HireDate AS Joinning 
     FROM Employees 
     WHERE Region IS NOT NULL 
    ) a 
) Select * from myres where myres.rownum > 0 and myres.rownum < = 0+20 
+0

быть осторожным, где вы использовать псевдонимы, попробуйте использовать HireDate вместо Joinning в Заявке пунктом. – safejrz

+1

'ROW_NUMBER()' будет перечислять все строки, возвращенные с уникальным номером. Это происходит до того, как 'DISTINCT' считается таким, чтобы спасти себя от ненужного оператора« Distinct Sort »в плане запроса, вы должны удалить« DISTINCT ». –

+0

Почему вы даже используете подзапрос? Не нужно imo. – NickyvV

ответ

1

Попробуйте

SELECT * FROM (
SELECT DISTINCT ROW_NUMBER() OVER (ORDER BY HireDate DESC) rownum, 
LastName, Country, HireDate AS Joinning 
FROM Employees 
WHERE Region IS NOT NULL 
) r 
+0

Опять же, использование исходного имени столбца не является для меня проблемой. На самом деле Hiredate будет Sub Query в реальном случае. – marifrahman

0

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

SELECT * FROM ( SELECT DISTINCT ROW_NUMBER() ROWNUM, LastName, Страна, HireDate AS Joinning) от сотрудников ГДЕ Регион НЕ NULL ORDER BY Joining DESC)

Надеюсь, это вам поможет!

+0

«Функция« ROW_NUMBER »должна иметь предложение OVER» – marifrahman

0

Использование Оригинальное название поля, что будет работать нормальноHireDate

SELECT * FROM (
    SELECT DISTINCT ROW_NUMBER() OVER (ORDER BY HireDate DESC) rownum, 
    LastName, Country, HireDate AS Joinning 
    FROM Employees 
    WHERE Region IS NOT NULL 
    ) r 
+0

Я знаю, что исходное имя столбца будет работать нормально - но это не мой Qn. HireDate на самом деле будет подзапросом, псевдонимом которого является соединение. – marifrahman

Смежные вопросы