2014-01-06 7 views
-1

Я ищу быстрый эффективный способ преобразования:Преобразование строк в столбцы с условием, где SQL Server 2008

ID Type  Amount 
0 Damages 1 
0 Other  2 
1 Damages 3 
1 Other  4 
2 Damages 5 
2 Other  6 

Для

ID Damages Other 
0 1  2 
1 3  4 
2 5  6 

Есть около 200000 записей в таблице, используя SQL Server 2008.

+0

Вопросов просящих коды должны продемонстрировать минимальное понимание решаемой задачи. Включите попытки решения и почему они не работают. – Kermit

+0

Вы должны что-то попробовать .. – Mihai

+0

Я не знал, с чего начать, следовательно, никакой попытки извините. – Jammy

ответ

3

Существует несколько различных способов получения результата. Вы можете использовать выражение CASE, с агрегатной функцией:

select id, 
    sum(case when type ='Damages' then amount else 0 end) damages, 
    sum(case when type ='Other' then amount else 0 end) other 
from yourtable 
group by id; 

См SQL Fiddle with Demo. Или, так как вы используете SQL Server 2008, то вы можете использовать функцию PIVOT:

select id, Damages, Other 
from yourtable 
pivot 
(
    sum(amount) 
    for type in (Damages, Other) 
) piv 

См SQL Fiddle with Demo

+0

+1 Это девушка, которую я знаю! – Kermit

+0

Является ли метод более эффективным или без разницы? – Jammy

+0

@Jammy Вам нужно будет протестировать вашу систему (индексы и т. Д.), Но агрегировать с CASE _tends_, чтобы быть более эффективными. – Taryn

Смежные вопросы