-4
ID  QuestionNo  AnswerPercent
1    15          10  
1    16          10  
1    17          20
1    18          25
2    15          30
2    16          0
2    17          15
2    18          25

出力

ID  QuestionNo  AnswerPercent
1    15          10  
1    16          30  
1    17          20
1    18          25
2    15          30
2    16          15
2    17          15
2    18          25

ID ごとに、質問 16 と 17 の回答率を 16 にマージする必要があります。ID によっては、16 または 17 の質問番号がない可能性があります。

誰でもこれで私を助けることができますか?ありがとう!。

4

3 に答える 3

2

私はこれがあなたが求めているものだと信じていますUPDATEJOIN

UPDATE A
SET A.AnswerPercent = B.AnswerPercent
FROM YourTable A
JOIN (SELECT ID, SUM(AnswerPercent)'AnswerPercent'
      FROM YourTable
      WHERE QuestionNo IN ('16','17')
      GROUP BY ID
     )B
ON A.ID = B.ID
WHERE A.QuestionNo = '16'

デモ: SQL フィドル

于 2013-07-10T13:53:45.737 に答える
1

テーブルを 2 回追加してみてください...a質問 17 の行を除くすべての行を持つようにエイリアス化されたテーブルと、b質問 17 の行を持つようにエイリアス化されたテーブル

Select a.Id, a.QuestionNo,
   a.AnswerPercent + 
       case A.QuestionNo When 16 
       then coalesce(b.AnswerPercent, 0) End 
       else 0 End AnswerPercent
From table a 
   left Join table b 
     on a.id = b.Id 
       And a.QuestionNo != 17
       And b.QuestionNo = 17

既存のテーブルを更新することだけが必要な場合は、更新と削除が必要です。

update a set 
    AnswerPercent = a.AnswerPercent + 
      IsNull(b.AnswerPercent, 0)
from table a 
   left Join table b  
     on a.id = b.Id 
       And a.QuestionNo = 16
       And b.QuestionNo = 17

 --and then ... 

 delete table where QuestionNo = 17
于 2013-07-10T13:57:35.020 に答える
0
with aaa as(
select sum(AnswerPercent) as AnswerPercent,ID
from Table
where QuestionNo in (16,17)
group by ID)

select * from Table where QuestionNo <> 16
union
select ID, 16, sum
from aaa
order by ID,AnswerPercent
于 2013-07-10T13:54:09.457 に答える