表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
一次类推
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
一次类推
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 行受影响)
pivot (sum(aprice)
FOR kid IN ( [1], [2], [3])) as pvt order by sid