2012-01-06 49 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上計算的列

無效的列名稱 '產品'。

如何申請DENSE_RANK()上的產品?

+1

只是要清楚:這有沒有關係'DENSE_RANK()' - 你不能在你的'選擇指的是新推出的列別名以後'聲明 - 你必須使用一種方法,正如Mithrandir在他的迴應中所表明的那樣 – 2012-01-06 07:17:51

回答

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