我的表1的数据如下:
产品 日期 销量
A 2010-12-1 100
B 2010-12-2 250
C 2010-12-3 200
D 2010-12-2 150我想把数据按表2输出
2010-12-1 2010-12-2 2010-12-3 2010-12-4 .........
A 100
B 250
C 200
D 150就是每天记录产品的明细,好像比较难,请高手给点建议。
产品 日期 销量
A 2010-12-1 100
B 2010-12-2 250
C 2010-12-3 200
D 2010-12-2 150我想把数据按表2输出
2010-12-1 2010-12-2 2010-12-3 2010-12-4 .........
A 100
B 250
C 200
D 150就是每天记录产品的明细,好像比较难,请高手给点建议。
set @sql = 'select 产品 '
select @sql = @sql + ' , max(case convert(varchar(10),日期,120) when ''' + 日期 + ''' then 销量 else 0 end) [' +日期 + ']'
from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
set @sql = @sql + ' from tb group by 产品'
exec(@sql)
insert into tb values('A', '2010-12-1', 100)
insert into tb values('B', '2010-12-2', 250)
insert into tb values('C', '2010-12-3', 200)
insert into tb values('D', '2010-12-2', 150)
godeclare @sql varchar(8000)
set @sql = 'select 产品 '
select @sql = @sql + ' , max(case convert(varchar(10),日期,120) when ''' + 日期 + ''' then 销量 else 0 end) [' +日期 + ']'
from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
set @sql = @sql + ' from tb group by 产品'
exec(@sql)
/*
产品 2010-12-01 2010-12-02 2010-12-03
---------- ----------- ----------- -----------
A 100 0 0
B 0 250 0
C 0 0 200
D 0 150 0
*/set @sql = 'select 产品 '
select @sql = @sql + ' , max(case convert(varchar(10),日期,120) when ''' + 日期 + ''' then ltrim(销量) else '''' end) [' +日期 + ']'
from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
set @sql = @sql + ' from tb group by 产品'
exec(@sql)
/*
产品 2010-12-01 2010-12-02 2010-12-03
---------- ------------ ------------ ------------
A 100
B 250
C 200
D 150
*/drop table tb
from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
order by 日期