Я пытаюсь упорядочить значения, которые будут вставлены в другую таблицу, на основе их значения заказа из вторичной таблицы. Мы переносим старые данные в новую таблицу с немного другой структурой.
Я думал, что смогу выполнить sh с помощью функции string_split
, но я не очень опытен с SQL
и поэтому я сталкиваюсь с некоторыми проблемами.
Вот что у меня есть:
UPDATE lse
SET Options = a.Options
FROM
dbo.LessonStepElement as lse
CROSS JOIN
(
SELECT
tbl1.*
tbl2.Options,
tbl2.QuestionId
FROM
dbo.TrainingQuestionAnswer as tbl1
JOIN (
SELECT
string_agg((CASE
WHEN tqa.CorrectAnswer = 1 THEN REPLACE(tqa.AnswerText, tqa.AnswerText, '*' + tqa.AnswerText)
ELSE tqa.AnswerText
END),
char(10)) as Options,
tq.Id as QuestionId
FROM
dbo.TrainingQuestionAnswer as tqa
INNER JOIN
dbo.TrainingQuestion as tq
on tq.Id = tqa.TrainingQuestionId
INNER JOIN
dbo.Training as t
on t.Id = tq.TrainingId
WHERE
t.IsDeleted = 0
and tq.IsDeleted = 0
and tqa.IsDeleted = 0
GROUP BY
tq.Id,
tqa.AnswerDisplayOrder
ORDER BY
(SELECT [Value] FROM STRING_SPLIT((SELECT AnswerDisplayOrder FROM dbo.TrainingQuestion WHERE Id = tmq.Id), ','))
) as tbl2
on tbl1.TrainingQuestionId = tbl2.QuestionId
) a
WHERE
a.TrainingQuestionId = lse.TrainingQuestionId
Я использую AnswerDisplayOrder
- это просто nvarchar
список, разделенный запятыми id
s для ответов на вопрос.
Вот пример:
У меня есть 3 строки в таблице TrainingQuestionAnswer, которые выглядят следующим образом.
ID TrainingQuestionId AnswerText
-------------------------------------------
215 100 No
218 100 Yes
220 100 I'm not sure
У меня есть 1 строка в таблице TrainingQuestion, которая выглядит следующим образом.
ID AnswerDisplayOrder
--------------------------
100 "218,215,220"
Теперь я пытаюсь сделать следующее: обновить строку в новой таблице, объединяя все ответы, ответы должен быть в правильном порядке, который зависит от AnswerDisplayOrder
в таблице TrainingQuestion
. По сути, в новой таблице будет строка, похожая на следующую:
ID Options
--------------
193 "Yes No I'm not sure"
Я знаю, что способ, которым я пытаюсь это сделать, может вообще не быть возможным. Я все еще учусь и просто хотел бы получить несколько советов или рекомендаций о том, как сделать эту работу. Я также знаю, что string_split
не гарантирует порядок. Я открыт для других предложений, которые также гарантируют заказ.