Sql 如何將行轉為列

摘要:Sql 如何將行轉為列

表内容如下:
company_id    bank_id    amount
1001            中行      100.00
1002            建行      200.00
1002            建行      300.00
1001            招行      400.00

轉換后輸出:

company_id  中行 <-bank_id,不固定    建行    招行  。。。。
    1001    100.00                  0.00    400.00
    1002      0.00                  500.00    0.00

 

sql:

declare @sql varchar(8000)
set @sql = 'select company_id '
select @sql = @sql + ' , sum(case bank_id when ''' + bank_id + ''' then amount else 0 end) [' + bank_id + ']'
from (select distinct bank_id from tb) as a
set @sql = @sql + ' from tb group by company_id'
exec(@sql)

關鍵在于構造sql,然後去執行。
case bank_id when ''' + bank_id + ''' then amount else 0 end 這句會將相同bank_id的取在一起,然后sum求和 select @sql = @sql + ' , sum(case bank_id when ''' + bank_id + ''' then amount else 0 end) [' + bank_id + ']'
from (select distinct bank_id from tb) as a 這句因為a中查出所有bank_id,沒有加過濾條件,則會將所有bank_id拼接,以此來實現了行到列的轉換。