SQL 動態交叉表使用

動態交叉表,就是行向的列不確定﹐根據查詢出來的內容來顯示的﹐

一些統計報表經常用到﹐而且效率很高.

如﹕

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) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP道长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值