Настройка Oracle :
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
:------- | ---------:
France | 51
France | 52
Germany | 42
Germany | 43
USA | 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
:------- | ---------:
France | 51
France | 52
Germany | 42
Germany | 43
USA | 13
дБ <> скрипка здесь