某个表里面有个字段存的是多个id,中间用逗号隔开的,
比如 这个字段的值为:P00008,P00004,P00006,P00005,P00007
二这种id编号对应的就是一个product产品表
这个产品表的字段有 product_id,productdesc对应关系
P00008,A产品
P00004,B产品
P00006,C产品
P00005,F产品
P00007,Z产品
P00009,G产品
P00003,T产品
可能这个表还有其他产品的id,而且对应的的A表的那个字段也有可能记录其他的id需要显示出来这个字段的内容为
A产品,B产品,C产品,F产品,Z产品
请问如何通过sql实现?
比如 这个字段的值为:P00008,P00004,P00006,P00005,P00007
二这种id编号对应的就是一个product产品表
这个产品表的字段有 product_id,productdesc对应关系
P00008,A产品
P00004,B产品
P00006,C产品
P00005,F产品
P00007,Z产品
P00009,G产品
P00003,T产品
可能这个表还有其他产品的id,而且对应的的A表的那个字段也有可能记录其他的id需要显示出来这个字段的内容为
A产品,B产品,C产品,F产品,Z产品
请问如何通过sql实现?
解决方案 »
- 求助!有个关于经纬度分组的SQL不会写
- ORacle9i 的数据如何导入到Sql2005, 没有分了 求大家帮忙了
- 表的数据量很大,怎么处理?
- Oracle :new 与:old 和变量的问题
- 如何较快地将db2的数据导入oracle??
- 百分求一句SQL语句,懂的人应该很简单
- view 中可以加上index吗
- where条件中使用or的一个问题
- 谁有比较详细的建立快照复制的资料???????????????????????????????????
- kettle求助: 抽取数据时连接重置Connection reset
- 在32位windows2003 sp2系统+oracle9.2.0.1+8G内存
- 替代变量直接回车问题
SQL> --这种设计上是有问题的,违反关系数据库最基本的第一范式。
SQL> --造成关系运算的麻烦,所以尽可能从设计上解决问题。
SQL> select * from product;PRODUCT_ID PRODUCTDESC
---------- -----------
P00008 A产品
P00004 B产品
P00006 C产品
P00005 F产品
P00007 Z产品
P00009 G产品
P00003 T产品
7 rows selected
SQL> select * from sales;
PRODUCT_ID
----------------------------------
P00008,P00004,P00006,P00005,P00007
P00003,P00004,P00007,P00008,P00009
SQL> SELECT s.product_id, wm_concat(p.productdesc) productdesc
2 FROM product p, sales s
3 WHERE instr(s.product_id, p.product_id) > 0
4 GROUP BY s.product_id;
PRODUCT_ID PRODUCTDESC
---------------------------------- --------------------------------
P00003,P00004,P00007,P00008,P00009 A产品,B产品,Z产品,T产品,G产品
P00008,P00004,P00006,P00005,P00007 A产品,B产品,C产品,Z产品,F产品
SQL> --有点小缺陷,就是位置顺序不对应
SELECT product_id, ltrim(MAX(sys_connect_by_path(productdesc, ',')), ',')
FROM (SELECT s.product_id,
p.productdesc,
row_number() over(PARTITION BY s.product_id ORDER BY p.productdesc) rn
FROM product p, sales s
WHERE instr(s.product_id, p.product_id) > 0)
START WITH rn = 1
CONNECT BY PRIOR rn = rn - 1
AND PRIOR product_id = product_id
GROUP BY product_id;