mysql:一列转多行,多行转一列

系统中有这样一个表table_ids,parrent_ids保存的是一串用逗号隔开的id

需求:以orleid为依据,拼接id、parent_ids,同时要求去除重复的id。

思路:先拼接id、parent_ids为一个字符串(暂且叫idstr),去除最后一个逗号,然后以roleid为依据,把idstr按逗号分割成多行,去重,再把多行拼接为一列。

  其中tmp_numindex表为只有一个字段id,类型为int,保存从1到10000的连续数字。

SELECT roleid,GROUP_CONCAT(str) FROM (
SELECT DISTINCT
    roleid,
    REPLACE(
        SUBSTRING_INDEX(str, ',', a.id),
        CONCAT(
            SUBSTRING_INDEX(str, ',', a.id - 1),
            ','
        ),
        ''
    )AS str
FROM
    tmp_numindex a
CROSS JOIN(
    SELECT
        roleid,
        CONCAT(str, ',')AS str,
        LENGTH(str)- LENGTH(REPLACE(str, ',', ''))+ 1 AS size
    FROMtable_ids
)b ON a.id <= b.size ) a GROUP BY roleid

 

转载于:https://www.cnblogs.com/MQNH/p/6831361.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值