1

私は過去数時間これにいましたが、ついに助けを求めることになりました. あるテーブルの複数の個別のレコードを、別のテーブルの複数のレコードで更新しようとしています。セットアップは次のとおりです。

テーブル 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
4

1 に答える 1

0

推測ですが、あなたが何を求めているのかについて、まだ答えられていない質問がいくつかあると思います.

;WITH src AS 
(
  SELECT QuestionId, r = ROW_NUMBER() OVER (ORDER BY QuestionId)
  FROM dbo.Questions
  WHERE SectionId = 7700
), trg AS
(
  SELECT QuestionId, r = ROW_NUMBER() OVER (ORDER BY QuestionId)
  FROM dbo.Questions
  WHERE SectionId = 6584
)
UPDATE trg
  SET QuestionId = src.QuestionId
  FROM trg INNER JOIN src
  ON trg.r = src.r;
于 2012-04-23T03:53:04.267 に答える