2012-06-12 42 views
2

我有這樣的數據SQL現有列有條件更新查詢

AnsID QuesID AnsOrder 
----------------------- 
1  5  NULL 
2  5  NULL 
3  5  NULL 
4  5  NULL 
5  5  NULL 
6  3  NULL 
7  3  NULL 
8  3  NULL 
9  3  NULL 
10  3  NULL 
11  4  NULL 
12  4  NULL 
13  4  NULL 
14  4  NULL 
15  4  NULL 
16  7  NULL 
17  9  NULL 
18  9  NULL 
19  9  NULL 
20  9  NULL 
21  8  NULL 
22  8  NULL 
23  8  NULL 
24  8  NULL 

想將其更新到這個格式

AnsID QuesID AnsOrder 
----------------------- 

1  5  1 
2  5  2 
3  5  3 
4  5  4  
5  5  5 
6  3  1 
7  3  2 
8  3  3 
9  3  4 
10  3  5 
11  4  1 
12  4  2 
13  4  3 
14  4  4 
15  4  5 
16  7  1 
17  9  1 
18  9  2 
19  9  3 
20  9  4 
21  8  1 
22  8  2 
23  8  3 
24  8  4 

Basicaly我想根據QuesID列更新升序AnsOrder列, 像這樣可讀性更好。

AnsID QuesID AnsOrder 
----------------------- 

1  5  1 
2  5  2 
3  5  3 
4  5  4  
5  5  5 

6  3  1 
7  3  2 
8  3  3 
9  3  4 
10  3  5 

11  4  1 
12  4  2 
13  4  3 
14  4  4 
15  4  5 

16  7  1 

17  9  1 
18  9  2 
19  9  3 
20  9  4 

21  8  1 
22  8  2 
23  8  3 
24  8  4 
+0

你如何建立要分配的訂單 - 沒有列可以通過生成數字索引來排序? (前幾個問題的AnsID以AnsID順序排列,最後幾個順序顛倒。) –

+0

需要有另一個列或解釋,爲什麼問題9的答案{11,25,23,13}收到數字{1,2,3,4}(對於其他行,其順序似乎不與答案ID的數字順序相同)。表格沒有固有的順序。 –

+0

@JonEgerton你在詢問有關唯一ID的任何主鍵列? – yogi

回答

3

你可能會quesID產生row_numbers並將其分配給AnsOrder這樣的:

; with ord as (
    select *, 
     row_number() over (partition by quesID 
          order by AnsID) rn 
    from table1 
) 
update ord 
    set ansorder = rn 

我已經AnsID一致性排序。 Check this @ Sql Fiddle

+0

Thanx兄弟,你的解決方案是爆炸... :) – yogi

+0

@yogi歡迎您:-) –