Неверное имя столбца в SQL Server - PullRequest
1 голос
/ 27 июля 2011

Я пытаюсь добавить условие where в свой оператор select, но получаю недопустимое исключение имени столбца.

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')

Но если я попытаюсь добавить:

WHERE "Value" > 0

Вы предложили мне использовать оригинальное имя, и оно отлично работает.

Но что, если я не могу использовать оригинальное имя столбца, как следует

SELECT 
    ROW_NUMBER() OVER(PARTITION BY P.ProviderID 
                      ORDER BY T.PostedUTC DESC, T.TransactionID DESC) as RN 
FROM
   Provider p 
INNER JOIN 
   Transaction T 
WHERE 
   RN = 1

Как я могу получить доступ к RN в моем месте ???

Ответы [ 4 ]

1 голос
/ 27 июля 2011

Вам необходимо использовать CTE или производную таблицу:

SELECT *
FROM (  SELECT ROW_NUMBER() OVER(PARTITION BY P.ProviderID 
                                 ORDER BY T.PostedUTC DESC, T.TransactionID DESC) as RN,
               [More Columns]
        FROM Provider p 
        INNER JOIN Transaction T 
        ON SomeCondition) DT
where DT.RN = 1

или

;WITH CTE AS
(
    SELECT ROW_NUMBER() OVER(PARTITION BY P.ProviderID 
                             ORDER BY T.PostedUTC DESC, T.TransactionID DESC) as RN,
           [More Columns]
    FROM Provider p 
    INNER JOIN Transaction T 
    ON SomeCondition
)
SELECT *
FROM CTE
where RN = 1
1 голос
/ 27 июля 2011

Вы можете сделать это так:

WITH T AS (
  SELECT ROW_NUMBER() OVER(PARTITION BY P.ProviderID ORDER BY T.PostedUTC DESC, T.TransactionID DESC) as RN 
  From Provider p Inner join Transaction T 
)
SELECT RN
FROM T
WHERE RN > 0;

РЕДАКТИРОВАТЬ : пропущен второй запрос в вопросе ...

0 голосов
/ 27 июля 2011

Еще один способ облегчить понимание этого - переписать ваш запрос как серию выражений CTE - Common Table Expressions. Они выглядят и действуют как «мини-локальные представления», где вы можете переименовывать столбцы и т. Д. Это сложно сделать из приведенного вами примера, но часто вы можете переписать сложные запросы и вернуться к столбцам с более хорошими именами в последующих запросах.

0 голосов
/ 27 июля 2011

необходимо повторить первоначальный расчет

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