我是新的SQL查询我需要帮助。
我有一个表格,其中QuestionId从0到8,但有时除零之外可以重复一个值,我想要的是top从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 :(得分: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;