2014-01-06 52 views
-1

我正在尋找一種快速有效的方式來轉換:轉換行與列WHERE條件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 

有20萬條左右表中的記錄,使用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,那麼你可以使用旋轉功能:

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