ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle行列转换

Oracle行列转换

原创 Linux操作系统 作者:zhouly1861 时间:2009-01-09 10:39:13 0 删除 编辑

    产品横向搜索需求:
select vpa.* from v_product_attribute vpa where id=6 order by paid;
苹果iPhone 4480 数码 网络类型        3G 
苹果iPhone 4480 数码 屏幕颜色 26万色 
苹果iPhone 4480 数码 样式         滑盖 
苹果iPhone 4480 数码 铃声         64和弦
    将多个属性显示在一行:
苹果iPhone 4480 数码 网络类型@3G 屏幕颜色@26万色 样式@滑盖 铃声@64和弦
    视图的结构:
create or replace view v_product_attribute as
select p.id,p.productname,p.unitprice,p_s.name pt,p_a.name,p_a_v.attrivalue,p_a_v.attriid paid
from   product p ,product_sort p_s ,product_attribute p_a, product_attribute_value p_a_v
where  p.typeid = p_s.id
and    p_a_v.pid = p.id
and    p_a_v.attriid = p_a.id; 
    通过FUNCTION实现:
create OR REPLACE FUNCTION list_pa(pid NUMBER)
RETURN VARCHAR2
IS
var_pa VARCHAR2(4000);
BEGIN
  FOR cur IN (SELECT name||' @'||attrivalue as pa FROM v_product_attribute vpa WHERE id=pid) LOOP
      var_pa := var_pa||' '||cur.pa;
  END LOOP;
  var_pa := rtrim(var_pa,1);
  RETURN var_pa;
END;

select distinct vpa.id,vpa.productname,vpa.unitprice,vpa.pt,list_pa(vpa.id) list_pa
from v_product_attribute vpa where id=6

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8797129/viewspace-534762/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-03

  • 博文量
    53
  • 访问量
    107040