日期:2014-05-17  浏览次数:20547 次

指点下写个查询的存储过程,谢谢。
本帖最后由 AOKMOKM 于 2013-02-25 10:38:22 编辑
食品表:
食品编号,食品名称
t01        汤圆
t02        粽子
t03        月饼
---------------------
数量表:
客户编号,食品编号,数量
s01               t01         20
s01               t03         15
s02               t01         30
s02               t02         25
s03               t03         35
---------------------
想用存储过程查询出这样的结果:
客户编号,汤圆数量,粽子数量,月饼数量
s01                     20       0           15
s02                     30       25          0
s03                     0         0           35
------------------------
食品种类数量不是固定的三种,可能很多,每种都要在列名显示,并查询数量。
请问,我的存储过程该怎么写。。
存储过程

------解决方案--------------------
行转列应用啊


declare @sql nvarchar(max)
select @sql=isnull(@sql+',','')+ quotename(食品名称)+'数量' from 食品表 group by 食品名称
set @sql='select * from (select a.客户编号,b.食品名称,a.数量 from 数量表 a,食品表 b where a.食品编号=b.食品编号)t
pivot (sum(数量) for 食品名称 in ('+@sql+'))a'
select @sql
exec(@sql)


------解决方案--------------------
declare @sql nvarchar(max)
select @sql=ISNULL(@sql,'')+',sum(case when 食品编号='''+食品编号+''' then 数量 else 0 end)['+食品名称+'数量]' from 食品表
exec('select 客户编号'+@sql+' from 数量表 group by 客户编号')