社区问的人太多了,保存一个备用
--
建立测试环境
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
*/
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 举报,一经查实,本站将立刻删除。