表Supplier
   Sid      Sname
     1        张
     2        王
表Kind
   Kid       Kname
     1         食用
     2         饮料
...
表A
   Aid       Sid        Kid         Aprice
    1         1           1           100
    2         1           1           200
    3         2           2           400
表Kind里的Kid会增加
要查询的结果如下
Sid        Sname         Kind1           Kind2     
 1           张            300              0
 2           王             0              400
关键是当Kind表中增加新的Kid 3    衣服  时,查询的结果显示如下
Sid        Sname         Kind1           Kind2      Kind3
 1           张            300              0         0
 2           王             0              400        0
一次类推

解决方案 »

  1.   

    create table Supplier(Sid int,Sname varchar(2) )
    insert Supplier select     1,        '张'
    insert Supplier select     2,        '王'select * from Suppliercreate table Kind(Kid  int,Kname varchar(10) )
    insert kind select      1,         '食用'
    insert kind select      2,         '饮料'create table A(   Aid int,      Sid  int,      Kid   int,       Aprice int)
    insert A select     1,         1,           1,           100
    insert A select     2,         1,           1,           200
    insert A select     3,         2,           2,           400declare @sql varchar(4000)
    set @sql='select Supplier.Sid,Supplier.Sname'
    select @sql=@sql+',[kind'+rtrim(kid)+']=sum(case when a.kid='+rtrim(kid)+' then Aprice else 0 end)'
    from kind 
    exec(@sql+' from a join Supplier on a.Sid=Supplier.sid group by Supplier.Sid,Supplier.Sname')
    Sid         Sname kind1       kind2
    ----------- ----- ----------- -----------
    1           张     300         0
    2           王     0           400(2 行受影响)
      

  2.   

    select sid,sname,[1] as kind1,[2] as kind2 ,[3] as kind3 from (select A.sid,sname=Supplier.sname,A.kid,A.aprice from A,Supplier where A.sid=Supplier.sid) p
    pivot (sum(aprice) 
    FOR kid IN ( [1], [2], [3])) as pvt order by sid