2014-03-30 2 views
0

안녕하세요 메신저 SQL 쿼리에 새로운 도움이 필요합니다.범위 그룹을 사용하여 열 값을 업데이트하십시오

QuestionId가 0에서 8까지 인 테이블이 있지만 가끔 0을 제외하고 값을 반복 할 수 있습니다. 맨 위로부터 0부터 8까지의 그룹을 만들고 다른 0이 발생하면 대신 새 그룹이됩니다. 내가 SurveyID 열에 임의의 숫자를주고 싶습니다.

QuestionID SurveyID 
    0   NULL 
    1   NULL 
    2   NULL 
    3   NULL 
    4   NULL 
    4   NULL 
    5   NULL 
    6   NULL 
    7   NULL 
    7   NULL 
    8   NULL 
    8   NULL 
    0   NULL 
    1   NULL 
    2   NULL 
    3   NULL 
    4   NULL 
    4   NULL 
    5   NULL 
    6   NULL 
    6   NULL 
    7   NULL 
    8   NULL 
    0   NULL 
    1   NULL 
    2   NULL 

내가 내가 그룹 양식에 고유 한 임의의 값을주고 싶은 두 번째 0

전에 먼저 0에서 그룹의 surveyID을 업데이트 할 0 다시 8-0에 새로운 임의의 값 - 8

QuestionID SurveyID 
    0   8888 
    1   8888 
    2   8888 
    3   8888 
    4   8888 
    4   8888 
    5   8888 
    6   8888 
    7   8888 
    7   8888 
    8   8888 
    8   8888 
    0   1232 
    1   1232 
    2   1232 
    3   1232 

나는 이것을 원한다.

+0

귀하의 데이타베이스 는요? – Mihai

+0

Microsoft SQL Server 2008 R2 –

+0

첫 번째 및 두 번째 0은 무엇과 관련되어 있습니까? ID 열이 있습니까? – Mihai

답변

1

CTE 쿼리를 사용하여 원하는 방식으로 SurveyId을 생성 할 수 있습니다. 기본 키 열의 이름이 Id이고 테이블이 seq 인 것으로 가정 했으므로 교체하십시오. 다른 방법으로 난수를 생성 할 수도 있습니다.

with cte as 
(
    select Id, questionId, convert(int, rand() * Id * 1000) as surverId 
    from seq 
    where questionId = 0 

    union all 

    select seq.Id, seq.questionId, cte.surverId 
    from seq 
    inner join cte on cte.Id + 1 = seq.Id 
    where seq.questionId <> 0 
) 

merge seq as target 
using (select * from cte) as source (Id, questionId, surveyId) 
on (target.Id = source.Id) 
when matched then 
    update set target.SurveyId = source.surveyId; 
+0

하지만 다른 도움말은 측량 값을 업데이트하고 설정할 수있는 방법입니다. 지금 당장은 새 테이블을 만들고 표시하는 것만으로도 내가 원하는 것이지만 완벽합니다. 설문 조사의 가치를 업데이트 할 수 있습니까? –

+0

죄송합니다. 죄송합니다. 업데이트 부분을 잊어 버렸습니다. 내 대답을 지금보십시오. – Szymon

+0

당신은 천재입니다! 완벽 해! –

관련 문제