如果你不能确定到底有多少Category的值,就不要奢望用一句SQL语句来做,你可以在论坛中 搜索一下,关于交叉表的制作。

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1620/1620620.xml?temp=2.312869E-02
      

  2.   

    declare @sql varchar(8000)
    set @sql = 'select SID,RID'
    select @sql = @sql + ',sum(case CategoryID when '''+CategoryID+''' then Amount else 0 end) as Category'+cast(CategoryID as varchar(50))+'Amount'
      from (select  CategoryID from Category) as a
    select @sql = @sql+' from History group by CategoryID,SID,RID'exec(@sql)
      

  3.   

    declare @sql varchar(8000)
    set @sql = 'select SID,RID,'
    SELECT @SQL = @SQL + 'SUM( CASE CategoryID WHEN '+CASE(CATEGORYID AS NVARCHAR(50) ) +' THEN Amount else 0 end) as'+CateName+'-Amount,'
        from category select @sql = left(@sql,len(@sql)-1) +
        'from 销售历史History group by SID,RID'exec (@sql)
      

  4.   

    yoki(小马哥) 又比我快一点,我老实去干活了,不瞎溜了。
      

  5.   

    CREATE TABLE Category(CategoryID varchar(10),  CateName  varchar(50))
    insert into category values(   '1',      '类别一') 
    insert into category values('2'   ,   '类别二'  )
    insert into category values('3'   ,   '类别三' )create table History(SID int, RID int, CategoryID varchar(10), Amount int)
    insert into history values(1 ,   1  , '1'    ,      5)  
    insert into history values(1  , 1  , '2'     ,     6 )
    insert into history values(1  , 1 ,  '3'      ,    4  )
    insert into history values(1  , 2 ,  '2'      ,     6  )      declare @sql varchar(8000)
    set @sql = 'select SID,RID'
    select @sql = @sql + ',sum(case CategoryID when '''+CategoryID +''' then Amount else 0 end) as Category'+ CategoryID +'Amount'
      from (select  CategoryID from Category) as a
    select @sql = @sql+' from History group by SID,RID'exec(@sql)
    drop table category
    drop table history
      

  6.   

    declare @sql varchar(8000)
    set @sql = 'select SID,RID'
    select @sql = @sql + ',sum(case cast(CategoryID as varchar(10)) when '''+cast(CategoryID as varchar(10)) +''' then Amount else 0 end) as Category'+ cast(CategoryID as varchar(10)) +'Amount'
      from (select  CategoryID from Category) as a
    select @sql = @sql+' from History group by SID,RID'
    exec(@sql)