行转列,列转行问题,根据PZ把这条数据分成两行SQL该怎么写

image.png

FineReport 帆软用户AK9hEVlRMF 发布于 7 天前
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
超级无敌小熊蛋Lv5初级互助
发布于7 天前

什么数据库吖

最佳回答
0
Yours飞飞Lv5初级互助
发布于7 天前(编辑于 7 天前

WITH RECURSIVE nums (n) AS (

  SELECT 1

  UNION ALL

  SELECT n + 1 FROM nums WHERE n < (SELECT MAX(LENGTH(PZ) - LENGTH(REPLACE(PZ, ',', '')) + 1) FROM test)

),

split_pz AS (

  SELECT 

    UUID,BT,

    SUBSTRING_INDEX(SUBSTRING_INDEX(PZ, ',', n), ',', -1) AS PZ,

    SJ1,TBR,NR,MJ,LX

  FROM test

  JOIN nums ON n <= LENGTH(PZ) - LENGTH(REPLACE(PZ, ',', '')) + 1

)

SELECT * FROM split_pz; 

这样吗?image.png

  • 帆软用户AK9hEVlRMF 帆软用户AK9hEVlRMF(提问者) 是这样 但是如果PZ多了的话有没有简便的方便
    2025-10-27 09:39 
  • Yours飞飞 Yours飞飞 回复 帆软用户AK9hEVlRMF(提问者) 更新了答案,你看这个可以满足你的需求嘛
    2025-10-27 09:49 
最佳回答
0
ZDXLv5初级互助
发布于7 天前(编辑于 7 天前

这个需要用递归, 没有MySQL, 你用ai将这个orcl的代码 转换成MySQL的 with  recursive 临时表名称 

image.png

WITH T1 AS
 (SELECT SYS_GUID() AS UUID, 'CCC' AS BT, '玉米,大豆' AS PZ, 'C级' AS MJ
    FROM DUAL)
SELECT UUID, BT, REGEXP_SUBSTR(PZ, '[^,]+', 1, LEVEL) AS PZ_SPLIT
  FROM T1
CONNECT BY LEVEL <= REGEXP_COUNT(PZ, ',') + 1
       AND PRIOR PZ = PZ
       AND PRIOR SYS_GUID() IS NOT NULL

最佳回答
0
华莉星宸Lv7专家互助
发布于7 天前(编辑于 7 天前

参考写法

image.png

或是

image.png

  • 5关注人数
  • 119浏览人数
  • 最后回答于:7 天前
    请选择关闭问题的原因
    确定 取消
    返回顶部