我的表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就是每天记录产品的明细,好像比较难,请高手给点建议。

解决方案 »

  1.   

    declare @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) 
      

  2.   

    create table tb(产品 varchar(10),日期 datetime,销量 int)
    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
      

  3.   

    --这样看看
    from (select distinct convert(varchar(10),日期,120) 日期 from tb) as a
    order by 日期