问题描述
我有下表
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,TY
我需要该表每行具有一个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"]
。然后,我们可以使用集合返回函数json_table()
将数组取消嵌套为行。