在 DB2 中取消转置逗号分隔列
使用逗号分隔列的数据存储可能会带来挑战。此查询演示了如何使用递归 SQL 技术在 DB2 中转换此类数据。
考虑初始表:
Id | FK_ID | Reference ----------------------- 1 2100 GI2, GI32 2 2344 GI56
所需的结果是将逗号分隔的值分隔为多行:
Id | FK_ID | Reference ----------------------- 1 2100 GI2 2 2100 GI32 3 2344 GI56
使用递归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
注意:此方案假设逗号分隔值的数量不超过99。调整lvl条件可以增加支持的值。
以上是如何使用递归 SQL 在 DB2 中反转逗号分隔列?的详细内容。更多信息请关注PHP中文网其他相关文章!