sql - 如何重新设计桌子?像递归 CTE
问题描述
由于 Bigquery 对递归 CTE 的支持有限,我只需要使用一些愚蠢的方法来处理这个问题。我的问题是我有一个下表:
Employee0 Employee1 Employee2 Employee3 Employee4
A A B B B
B B B B B
C A B B B
这表明 B 监督 A,而 A 监督 C。
我希望我的桌子是这样的:
Employee0 Employee1 Employee2 Employee3 Employee4
NULL NULL NULL A B
NULL NULL NULL NULL B
NULL NULL C A B
我不知道如何更改表。
任何人都可以帮忙吗?谢谢!
解决方案
以下示例适用于 BigQuery 标准 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'A' Employee0, 'A' Employee1, 'B' Employee2, 'B' Employee3, 'B' Employee4 UNION ALL
SELECT 'B', 'B', 'B', 'B', 'B' UNION ALL
SELECT 'C', 'A', 'B', 'B', 'B'
)
SELECT
emps[SAFE_OFFSET(4)] Employee0,
emps[SAFE_OFFSET(3)] Employee1,
emps[SAFE_OFFSET(2)] Employee2,
emps[SAFE_OFFSET(1)] Employee3,
emps[SAFE_OFFSET(0)] Employee4
FROM (
SELECT *,
ARRAY(
SELECT val
FROM UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r':"(.*?)"')) val WITH OFFSET
GROUP BY val
ORDER BY MIN(OFFSET) DESC
) emps
FROM `project.dataset.table` t
)
结果
Row Employee0 Employee1 Employee2 Employee3 Employee4
1 null null null A B
2 null null null null B
3 null null C A B
推荐阅读
- php - googlemaps codeigniter 未显示在视图中
- unity3d - Unity在自由落体时旋转播放器不起作用
- python - 尝试使用 PYMC3 和 NetworkX 进行非常基本的(3 个分类变量)贝叶斯推理
- node.js - 如何使用 fs.writeFileSync 将 .js 文件写入路径
- python - 迭代包含嵌套字典的多层次列表的项目并将其打印到python中的csv
- c# - “new RestClient()”调用在我的 Windows 服务中不起作用
- java - 从 Postgres DB 中检索图像并将其保存到文件夹
- ssh - 通过 SSH 端口转发 EMR Zepplin
- javascript - 在 JavaScript 中获取音频文件的 fft 数据?
- docker - 使用 Docker 将环境变量传递给 Spring Boot 应用程序不起作用