2011-05-03 99 views
2

是否有可能通過順序進行選擇查詢,結果是插入每行的位置新列?SQL按順序排序並插入到每一行的位置編號

,比如我有表:

Name 
------- 
A 
D 
D 
B 
C 
B 

,因此我想有表:

Name Position 
------------- 
A 1 
D 4 
D 4 
B 2 
B 2 
C 3 

感謝您的幫助

+0

什麼是 'A' 之間的關係,「1 ' - 和'B'和'2' - 我假設你會按姓名排序? – 2011-05-03 17:06:21

+0

yes按名稱排序 – gruber 2011-05-03 17:11:58

+0

您在兩分鐘前編輯過,指出如果有'B'兩次,那麼它們應該被分配相同的位置值? – 2011-05-03 17:15:44

回答

2

使用DENSE_RANK

SELECT Name , 
    DENSE_RANK() OVER (ORDER BY Name) AS 'Position' 
    FROM Table 

這將產生

Name Position 
------------- 
A 1 
B 2 
B 2 
C 3 
D 4 
D 4 

因此可能難以維持原來的訂貨

+0

我編輯了我的問題,以顯示我的意思更清楚 – gruber 2011-05-03 17:13:10

+0

看起來像你需要'dense_rank' – 2011-05-03 17:15:07

+0

@Martin是的謝謝。 – 2011-05-03 17:20:13

1

使用ROW_NUMBER

SELECT name,ROW_NUMBER() OVER(ORDER BY name) as Position 
FROM YourTable 
1
SELECT 
    Name, 
    ROW_NUMBER() OVER(ORDER BY Name) AS POSITION 
FROM Table_1 
0
SELECT Name, DENSE_RANK() OVER (ORDER BY Name) AS 'Position' 
FROM Table