2013-07-10 3 views
-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 

ВыходОбъединить значения двух строк в одну строку с помощью SQL

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 

Для каждого идентификатора ответ процента на вопросы 16 и 17 нужно быть объединены в 16. Скорее всего для некоторых идентификаторов не может будь то 16 или 17 номеров вопросов.

Может ли кто-нибудь помочь мне в этом. Благодаря!.

+2

Вопросы, требующие кода **, должны демонстрировать минимальное понимание проблемы, решаемой **. Расскажите, что вы пытались сделать, почему это не сработало и как оно должно работать. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – Kermit

+0

Что вы подразумеваете под слиянием? Добавьте их вместе? Сохранять одно из двух значений? Если да, то из каких дубликатов вы сохранили бы и почему? – Bridge

+0

То, что я имел в виду, добавляло только процент ответов для QuestionNo - 16 с answerPercent из 17 для того же ID. – Krishh

ответ

1

Я считаю, что это то, что вы после этого, UPDATE с JOIN к подзапросу:

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 Fiddle

+0

Я пытался ОБНОВИТЬ. Большое спасибо за демо. – Krishh

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 
1

попробуйте добавить таблицу в два раза ... стола aliased как 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 
Смежные вопросы