Oracle SQL:为一列中的每个值创建一个新行,更多值以逗号分隔
Oracle SQL: Create a new row for each value in a column with more values separated by comma
我有以下table
SELECT * FROM TABLE1
Date ID Completed_Task
01/01/2019 X300 SA, MA, TY
01/01/2019 X400 SA, GT, JY
01/01/2019 X500 SA, GT, TY
我需要 table 每行有一个 Completed_Task 并计数 completed_task(如果发生一次则为 1)
期望的输出:
Date ID Completed_Task Count
01/01/2019 X300 SA 1
01/01/2019 X300 MA 1
01/01/2019 X300 TY 1
01/01/2019 X400 SA 1
01/01/2019 X400 GT 1
01/01/2019 X400 JY 1
01/01/2019 X500 SA 1
01/01/2019 X500 GT 1
01/01/2019 X500 TY 1
让我知道如何在 Oracle Sql 中实现这一点。感谢您的帮助。
JSON 方法怎么样?
select t.dt, t.id, x.task
from table1 t
cross apply json_table(
'["' || replace(completed_task, ', ', '", "') || '"]',
'$[*]' columns (task varchar2(10) path '$')
) x
想法是将 CSV 列表视为 JSON 数组。为此,我们使用字符串函数,将 'SA, MA, TY'
转换为 ["SA", "MA", "TY"]
。然后,我们可以使用 set-returning 函数 json_table()
将数组取消嵌套到行。
我有以下table
SELECT * FROM TABLE1
Date ID Completed_Task
01/01/2019 X300 SA, MA, TY
01/01/2019 X400 SA, GT, JY
01/01/2019 X500 SA, GT, TY
我需要 table 每行有一个 Completed_Task 并计数 completed_task(如果发生一次则为 1)
期望的输出:
Date ID Completed_Task Count
01/01/2019 X300 SA 1
01/01/2019 X300 MA 1
01/01/2019 X300 TY 1
01/01/2019 X400 SA 1
01/01/2019 X400 GT 1
01/01/2019 X400 JY 1
01/01/2019 X500 SA 1
01/01/2019 X500 GT 1
01/01/2019 X500 TY 1
让我知道如何在 Oracle Sql 中实现这一点。感谢您的帮助。
JSON 方法怎么样?
select t.dt, t.id, x.task
from table1 t
cross apply json_table(
'["' || replace(completed_task, ', ', '", "') || '"]',
'$[*]' columns (task varchar2(10) path '$')
) x
想法是将 CSV 列表视为 JSON 数组。为此,我们使用字符串函数,将 'SA, MA, TY'
转换为 ["SA", "MA", "TY"]
。然后,我们可以使用 set-returning 函数 json_table()
将数组取消嵌套到行。