2015-11-03 23 views
0

合併表後更新專欄中,我得到了以下結果SQL - 對不同行

| id | count | some_id | 
| 0 | 0 | 1  | 
| 1 | 1 | 1  | 
| 2 | 2 | 1  | 
| 3 | 7 | 1  | 
| 4 | 12 | 1  | 
| 5 | 1 | 2  | 
| 6 | 2 | 2  | 
| 7 | 5 | 2  | 
and so on... 

some_id,我需要將count更改爲正確的計數序列

結果我會需要是

| id | count | some_id | 
| 0 | 0 | 1  | 
| 1 | 1 | 1  | 
| 2 | 2 | 1  | 
| 3 | 3 | 1  | 
| 4 | 4 | 1  | 
| 5 | 0 | 2  | 
| 6 | 1 | 2  | 
| 7 | 2 | 2  | 
and so on... 

假設some_id0<some_id<n

有沒有辦法可以做到這一點?我唯一想要的就是使用循環,但除此之外還有其他方法嗎?

+0

使用'ROW_NUMBER()'來增加你的'count'列 - 通過分區你的' some_id'列和按「Id」列排序http://stackoverflow.com/a/534280/1693085 –

+1

你應該用更多的信息來重寫你的問題。考慮包括你如何生成你的第一個結果集。 – bsivel

回答

1

用戶ROW_NUMBER()

SELECT 
     id, 
     -1 + ROW_NUMBER() OVER (PARTITION BY some_id ORDER BY some_id) as [Count], 
     some_id 
FROM YourTable 
+0

'ROW_NUMBER'從'1'開始,OP希望第一行用'0'索引,所以你應該減1。 –

+0

@MickMnemonic是的,我看到一個,不知道爲什麼沒有包括。 –

+0

我仍在努力在正確的sintax添加'-1'並從'0開始 –

0

你必須使用DENSE_RANK達到相同的: -

SELECT id, DENSE_RANK() OVER (ORDER BY some_id) AS 'Count', some_id 
FROM your_table;