微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver一个动态交叉表的范例

社区问的人太多了,保存一个备用

-- 建立测试环境

set  nocount  on

create   table  test(model  varchar ( 20 ),date  int  ,qty  int )

insert   into  test  select   ' a ' , ' 8 ' , ' 10 '

insert   into  test  select   ' a ' , ' 10 ' , ' 50 '

insert   into  test  select   ' b ' , ' 100 '

insert   into  test  select   ' b ' , ' 9 ' , ' 200 '

insert   into  test  select   ' b ' , ' 100 '

insert   into  test  select   ' c ' , ' 200 '

insert   into  test  select   ' d ' , ' 300 '

insert   into  test  select   ' e ' , ' 11 ' , ' 250 '

insert   into  test  select   ' e ' , ' 12 ' , ' 100 '

insert   into  test  select   ' f ' , ' 150 '

go

-- 测试


declare   @sql   varchar ( 8000 )

set   @sql = ' select model, '

 
select   @sql = @sql + ' sum(case when date= ''' + cast (date  as   varchar ( 10 )) + '''  then qty else 0 end)[ ' + cast (date  as   varchar ( 10 )) + ' ], '

from  ( select   distinct   top   100   percent   date

 
from  test  order   by  date)a


set   @sql   = left ( @sql , len ( @sql ) - 1 ) + '  from test group by model '


exec ( @sql )


 


-- 删除测试环境

drop   table  test

 
set  nocount  off


/*

model                8           9           10          11          12

-------------------- ----------- ----------- ----------- ----------- -----------

a                    10          0           50          0           0

b                    100         200         100         0           0

c                    0           0           200         0           0

d                    0           0           300         0           0

e                    0           0           0           250         100

f                    0           0           0           0           150

*/
 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐