python - WITH RCURSIVE CLAUSE 的替代方案
问题描述
Snowflake DB 不支持递归 with 子句功能,需要帮助我如何实现以下查询。以下查询在 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
解决方案
Snowflake 现在支持递归 WITH。
您的查询
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) AS 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://docs.snowflake.net/manuals/user-guide/queries-cte.html#overview-of-recursive-cte-syntax
推荐阅读
- javascript - 当用户单击每个列表项 [React] 时获取并显示新内容
- ios - swift 4.2突出显示时barButtonItem的字体发生变化
- node.js - 使用 NodeJS 和 ExressJS 出现 503 错误
- jquery - 所有触发器的背景颜色都不会改变
- apache-camel - Apache Camel 反应式 REST 内容类型
- python - 在 python setup.py 文件中的特定提交处拉取 git repo
- firebase - 在 Firebase Cloud Functions 中使用 Google Cloud Speech to Text
- python - 加载的 .pb 文件的 tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) 是 empy
- sql-server - Azure SQL 登录失败 > PW 重置 > 登录成功 > 稍后 > 再次出错
- html - 如何水平对齐文本和伴随图像?