Альтернатива с рекурсивной оговоркой - PullRequest
0 голосов
/ 18 января 2019

Snowflake DB не поддерживает рекурсивную функцию с предложением, Нужна помощь в достижении нижеуказанного запроса. Ниже запрос хорошо работает в Teradata

Если кто-то также может помочь мне достичь с помощью Python, это было бы замечательно

WITH RECURSIVE RECURTEMP(ID,KCODE,LVL)
AS(SELECT ID, MIN(KCODE) AS KCODE,1
FROM TABLE_A
GROUP BY 1
UNION ALL
SELECT b.ID, trim(a.KCODE)|| ';'||trim(b.KCODE), LVL+1
FROM TABLE_A a
INNER JOIN RECURTEMP b ON a.ID = b.ID AND a.KCODE > b.KCODE
)
SELECT * FROM RECURTEMP

! [Результат]: https://imgur.com/a/ppSRXeT

CREATE TABLE MYTABLE (
ID VARCHAR2(50),
KCODE VARCHAR2(50)
);

INSERT INTO MYTABLE VALUES  ('ABCD','K10');
INSERT INTO MYTABLE VALUES  ('ABCD','K53');
INSERT INTO MYTABLE VALUES  ('ABCD','K55');
INSERT INTO MYTABLE VALUES  ('ABCD','K56');

COMMIT;

ВЫХОД, как показано ниже

ID               KCODE          LEVEL  
--------------------------------------
ABCD             K10               1
ABCD             K53;K10           2
ABCD             K55;K10           2
ABCD             K56;K10           2
ABCD             K55;K53;K10       3
ABCD             K56;K53;K10       3
ABCD             K56;K55;K10       3
ABCD             K56;K55;K53;K10   4
...