was*_*IBM 3 sql db2 transform function rows
我有下表(引用的数量是可变的):
Id | FK_ID| Reference |
-----------------------
1 2100 GI2, GI32
2 2344 GI56
Run Code Online (Sandbox Code Playgroud)
我需要以下结果:
Id | FK_ID| Reference |
-----------------------
1 2100 GI2
2 2100 GI32
3 2344 GI56
Run Code Online (Sandbox Code Playgroud)
有没有使用DB2转换数据的简短方法?
你真的不应该存储这样的数据.幸运的是,有一种方法可以通过递归SQL来消除损坏,这些都是这样的:
WITH unpivot (lvl, id, fk_ref, reference, tail) AS (
SELECT 1, id, fk_ref,
CASE WHEN LOCATE(',',reference) > 0
THEN TRIM(LEFT(reference, LOCATE(',',reference)-1))
ELSE TRIM(reference)
END,
CASE WHEN LOCATE(',',reference) > 0
THEN SUBSTR(reference, LOCATE(',',reference)+1)
ELSE ''
END
FROM yourtable
UNION ALL
SELECT lvl + 1, id, fk_ref,
CASE WHEN LOCATE(',', tail) > 0
THEN TRIM(LEFT(tail, LOCATE(',', tail)-1))
ELSE TRIM(tail)
END,
CASE WHEN LOCATE(',', tail) > 0
THEN SUBSTR(tail, LOCATE(',', tail)+1)
ELSE ''
END
FROM unpivot
WHERE lvl < 100 AND tail != '')
SELECT id, fk_ref, reference FROM unpivot
Run Code Online (Sandbox Code Playgroud)
PS.没有测试过.
归档时间: |
|
查看次数: |
6518 次 |
最近记录: |