摘要: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拼接,以此來實現了行到列的轉換。