Oracle SQL列出key所有的values

-- 0. Create demo table
CREATE TABLE test (
PROD_CAT VARCHAR2(10),
PROD_NO VARCHAR2(15)
);

-- 1. Create demo data
BEGIN
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('A','1');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('A','2');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('A','3');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('B','2');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('A','4');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('B','1');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('A','6');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('A','7');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('B','5');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('B','8');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('C','0');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('D','1');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('C','2');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('D','3');
INSERT INTO test (PROD_CAT,PROD_NO) VALUES ('D','7');
COMMIT;
END;

-- 2. Use Oracle Analytic Function and Hierarchical Queries
SELECT PROD_CAT, max(substr(PROD_NO, 2)) PROD_NO
  FROM (SELECT PROD_CAT, sys_connect_by_path(PROD_NO, ',') PROD_NO
          FROM (SELECT PROD_CAT,
                       PROD_NO,
                       PROD_CAT || rn rchild,
                       PROD_CAT || (rn - 1) rfather
                  FROM (SELECT test.PROD_CAT,
                               test.PROD_NO,
                               row_number() over(PARTITION BY test.PROD_CAT ORDER BY test.PROD_NO) rn
                          FROM test))
        CONNECT BY PRIOR rchild = rfather
         START WITH rfather LIKE '%0')
 GROUP BY PROD_CAT ORDER BY 1;
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值