2012-06-12 3 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

할당 할 주문을 어떻게 설정하고 있습니까? 숫자 색인 생성을 위해 주문할 열이 없습니다. (처음 몇 QuesID는 AnsID 순서로, 마지막 부부는 순서가 맞지 않습니다.) –

+0

질문 9의 Answers {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

고맙습니다, 당신의 해결책은 강렬했습니다 ... :) – yogi

+0

@yogi 당신은 환영합니다 :-) –