私は過去数時間これにいましたが、ついに助けを求めることになりました. あるテーブルの複数の個別のレコードを、別のテーブルの複数のレコードで更新しようとしています。セットアップは次のとおりです。
テーブル x (QuestID、SectionID、Questtxt) PK= QuestID
テーブル y (QuestAGID、QuestID、AGID) PK = QuestAGID
コンテキストによっては、1 つのテーブルに質問があり、別のテーブルに質問の回答があります。質問はセクションまで一致します。各質問の回答は、最大 1 つの質問に一致します。質問回答テーブルのレコードを複製すると、1 つの質問に対して質問回答テーブルに 2 つの同じレコードが作成されます。これらの重複レコードを取得して、質問識別子を作成した新しい質問に置き換えたいと考えています。複数のレコードで値を 1 つずつ置き換えることができる update ステートメントを考え出すのに問題があります。
これは私がこれまでに思いついたものです:
declare @a as int
select @a = Count(x.sectionid) from x
where Sectionid=6584
update y
set QuestId = (select QuestId, ROW_NUMBER()
OVER (ORDER BY questid) AS Row2
from x
where SectionId=7700)
from y
join x on y.QuestId=x.QuestId
where x.Questid IN
(
select top (@a) y.QuestId, ROW_NUMBER()
OVER (ORDER BY y.Questid) as Row1
from y
inner join x
on y.QuestId=x.QuestId
where x.SectionId=6584
)
どんな助けでも大歓迎です。
ありがとう!
編集: 2 つのサブクエリからの結果のサンプルを次に示します。
クエリ 1
select QuestionId, ROW_NUMBER()
OVER (ORDER BY questionid)
from Questions
where SectionId=7700
結果:
QuestionId column2
------------- ----------
31254 1
31255 2
クエリ 2
declare @a as int
select @a = Count(Questions.sectionid) from Questions
where Sectionid=6584
select top (@a) Questions_AnswerGroup.Questionid, ROW_NUMBER()
OVER (ORDER BY Questions_AnswerGroup.Questionid)
from Questions_AnswerGroup
inner join Questions
on Questions_AnswerGroup.QuestionId=Questions.QuestionId
where Questions.SectionId=6584
結果:
Questionid column2
------------- ----------
24990 1
24991 2
2番目の編集:私はこれを可能な限り明確にして、誰もが不安にならないようにします。そして、見てくれてありがとう。
これが私の最初のステップです。セクション番号に基づいて Question_AnswerGroup レコードを複製しました。
insert into Questions_AnswerGroup (Questions.QuestionId,
Questions_AnswerGroup.AnswerGroupId,Questions_AnswerGroup.ControlTypeId,
Questions_AnswerGroup.IsRequired,Questions_AnswerGroup.Rank,Questions_AnswerGroup.ColumnCou nt,
Questions_AnswerGroup.EmailRecipient,Questions_AnswerGroup.FilterName,Questions_AnswerGroup .ResponseName,
Questions_AnswerGroup.IsHeader,Questions_AnswerGroup.IsVariable,Questions_AnswerGroup.MaxVa lue,
Questions_AnswerGroup.DefaultValue,Questions_AnswerGroup.CharCount,Questions_AnswerGroup.Ad ditionalInfo,
Questions_AnswerGroup.ConditionsId,Questions_AnswerGroup.InitVisible)
SELECT Questions_AnswerGroup.QuestionId,Questions_AnswerGroup.AnswerGroupId,
Questions_AnswerGroup.ControlTypeId,Questions_AnswerGroup.IsRequired,Questions_AnswerGroup. Rank,
Questions_AnswerGroup.ColumnCount,Questions_AnswerGroup.EmailRecipient,Questions_AnswerGrou p.FilterName,
Questions_AnswerGroup.ResponseName,Questions_AnswerGroup.IsHeader,Questions_AnswerGroup.IsV ariable,
Questions_AnswerGroup.MaxValue,Questions_AnswerGroup.DefaultValue,Questions_AnswerGroup.Cha rCount,
Questions_AnswerGroup.AdditionalInfo,Questions_AnswerGroup.ConditionsId,Questions_AnswerGro up.InitVisible
FROM Questions_AnswerGroup
inner join Questions
on Questions_AnswerGroup.QuestionId=Questions.QuestionId
where Questions.SectionId=6584
これにより、Question_AnswerGroup テーブルで次のような出力が得られました。
QuestionAnswerGroupId QuestionId
17438 24990
17439 24991
17444 24990
17445 24991
現在、両方の QuestionAnswerGroupId (オリジナルと複製したもの) の両方が、セクション 6584 に属する QuestionId に関連付けられています。作成した 2 つの QuestionAnswerGroupId を取得し、セクション 7700 の回答のない 2 つの質問に関連付ける必要があります。
Select questionid from Questions where sectionid=7700
これは次の結果になります。
questionid
31254
31255
したがって、Conculsion では、質問テーブルに存在する上記の 2 つの questionID (セクション 7700 から) を取得し、上記で作成した複製の代わりにそれらを配置する必要があります。
編集3:これは、重複した質問が作成された方法です:
insert into Questions(Questions.Rank,Questions.QuestionText,Questions.IsActive,Sections.SectionId,Questions.ShowNumber,Questions.IsTextOnly,Questions.ContextHelp,Questions.ConditionsId,Questions.InitVisible)
select Questions.Rank,Questions.QuestionText,Questions.IsActive,(Max(Sections.SectionId)),Questions.ShowNumber,Questions.IsTextOnly,Questions.ContextHelp,Questions.ConditionsId,Questions.InitVisible
from Questions, Sections
where Questions.SectionId=6584
Group by Questions.Rank,Questions.QuestionText,Questions.IsActive,Questions.ShowNumber,Questions.IsTextOnly,Questions.ContextHelp,Questions.ConditionsId,Questions.InitVisible