指点上写个查询的存储过程,多谢
指点下写个查询的存储过程,谢谢。
食品表:
食品编号,食品名称
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
------------------------
食品种类数量不是固定的三种,可能很多,每种都要在列名显示,并查询数量。
请问,我的存储过程该怎么写。。
------解决方案--------------------
行转列应用啊
------解决方案--------------------
食品表:
食品编号,食品名称
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 客户编号')