動態交叉表,就是行向的列不確定﹐根據查詢出來的內容來顯示的﹐
一些統計報表經常用到﹐而且效率很高.
如﹕
create table #a (日期 datetime, 單號 varchar(10),貨名 varchar(10), 數量 decimal(18,2) )
insert into #a
select '2010-01-01', 'A001', 'A1', '12'
union all select '2010-01-02', 'A002', 'B1' , '12'
union all select '2010-01-01', 'A001', 'C1' , '10'
union all select '2010-01-05', 'A005', 'A1' , '5'
-- select * from #a
/* 想把它显示成
日期 单号 A1 B1 C1 ...
2010-01-01 A001 12 0 10 ...
2010-01-02 A002 0 12 0...
2010-01-05 A005 5 0 0 ....
*/
Declare @sql varchar(8000)
set @sql = 'select 日期,單號 '
select @sql = @sql + ',sum(case 貨名 when ''' + 貨名 + ''' then 數量 else 0 end) [' + 貨名 + ']'
from ( select distinct 貨名 from #a ) as a
select @sql = @sql + ' from #a group by 日期, 單號'
exec(@sql)