2012-01-06 8 views
1
CASE 
      WHEN [col1] = 's' THEN 8 
      WHEN [col1] = 't' THEN 6 
      WHEN [col1] = 'u' THEN 9 
      WHEN [col2] = 'v' THEN 1 
....... 
END AS product, 
DENSE_RANK() OVER (ORDER BY product ASC) AS [Rank] 
FROM dbo.TableA 

DENSE_RANK() не работает на расчетной колонке Product, показываяDENSE_RANK на вычисляемый столбец

Invalid имя столбца 'продукта'.

Как подать заявку DENSE_RANK() на продукт?

+1

Просто чтобы быть ясен: это не имеет ничего общего с 'DENSE_RANK()' - вы просто не можете ссылаться на вновь вводимый псевдоним столбца позже в файле 'ВЫБРАТЬ 'statement - вы должны использовать подход, как показывает Митрандир в своем ответе –

ответ

3

Вы могли бы сделать что-то вроде этого:

SELECT 
    *, 
    DENSE_RANK() over (order by product) 
FROM (
SELECT 
    CASE 
      WHEN [col1] = 's' THEN 8 
      WHEN [col1] = 't' THEN 6 
      WHEN [col1] = 'u' THEN 9 
      WHEN [col2] = 'v' THEN 1 
... 
END AS product 
FROM dbo.TableA 
) t 
Смежные вопросы