sql - 使用按级别连接复制行
问题描述
我希望使用 CONNECT BY LEVEL 根据列值复制行。
这是我使用的代码:
SELECT
tbl1.*,
(tbl1.START_WEEK - tbl1.END_WEEK) wks_inbtwn
FROM
My_SQL_table tbl1 INNER JOIN (SELECT rownum repeat FROM dual CONNECT BY LEVEL <= tbl1.END_WEEK ) tbl2
ON tbl2.Repeat > tbl1.START_WEEK
我不断收到错误:
SQL Error [904] [42000]: ORA-00904: "tbl1"."START_WEEK": invalid identifier
我的表格如下:
+------------+------------+----------+
| Site_NUM | start_week | end_week |
+------------+------------+----------+
| France | 50 | 52 |
| Germany | 41 | 43 |
| USA | 12 | 13 |
+------------+------------+----------+
我想要的结果如下:
+----------+---------+
| Site_NUM | Week_no |
+----------+---------+
| France | 51 |
| France | 52 |
| Germany | 42 |
| Germany | 43 |
| USA | 13 |
+----------+---------+
任何帮助将不胜感激,在此先感谢。
解决方案
甲骨文设置:
CREATE TABLE My_SQL_table ( Site_NUM, start_week, end_week ) AS
SELECT 'France', 50, 52 FROM DUAL UNION ALL
SELECT 'Germany', 41, 43 FROM DUAL UNION ALL
SELECT 'USA', 12, 13 FROM DUAL;
查询:使用CONNECT BY
SELECT site_num,
COLUMN_VALUE wks_inbtwn
FROM My_SQL_table tbl1
CROSS JOIN
TABLE(
CAST(
MULTISET(
SELECT tbl1.START_WEEK + LEVEL
FROM DUAL
CONNECT BY tbl1.START_WEEK + LEVEL <= tbl1.END_WEEK
)
AS SYS.ODCINUMBERLIST
)
)
输出:
SITE_NUM | WKS_INBTWN :------- | ---------: 法国 | 51 法国 | 52 德国 | 42 德国 | 43 美国 | 13
查询 2:使用递归子查询因式分解子句
WITH rsqfc ( site_num, start_week, end_week ) AS (
SELECT site_num, start_week + 1, end_week
FROM my_sql_table
UNION ALL
SELECT site_num, start_week + 1, end_week
FROM rsqfc
WHERE start_week < end_week
)
SELECT site_num, start_week AS wks_inbtwn
FROM rsqfc
ORDER BY site_num, wks_inbtwn
输出:
SITE_NUM | WKS_INBTWN :------- | ---------: 法国 | 51 法国 | 52 德国 | 42 德国 | 43 美国 | 13
db<>在这里摆弄
推荐阅读
- python - 如何使用 Selenium 和 Python 切换窗口句柄
- apache-nifi - 使用 NiFi 中的 ExecuteSQL 处理器在 Avro 文件中更改数据类型
- go - 在 Go 中通过反射创建结构
- node.js - API 密钥是什么意思
- android-sqlite - 在 ListView 中显示图像
- reactjs - 使用 Jest 进行 React、TypeScript 和 RxJS 测试不起作用
- image - OG:Facebook URL 的 IMAGE 元属性给出错误的 URL 时间戳
- tizen - 无法在模拟器上运行蓝牙示例 tizen 手表应用程序
- android - 在将 Android 项目连接到 Firebase 时出现错误:“无法解决:localbroadcastmanager”
- swift - 如何使用绑定关联 Swift 枚举数组?