飞扬天下A 2021-10-15 15:50 采纳率: 50%
浏览 17

这种要从1行变成多行怎么处理?

这种要从1行变成多行怎么处理?

 

这种要从1行变成多行怎么处理?

create table #t (a varchar(100),b varchar(100))

 

insert into #t(a,b,c) values ('a1,b4,c1,d5,e8','张三,李四,王五,赵六,吴七',‘测试数据’)

 

a1,b4,c1,d5,e8    张三,李四,王五,赵六,吴七    测试数据
 

想得到

第一列            第二列           第三列

a1                    张三             测试数据

b4                   李四              测试数据

c1                   王五              测试数据

d5                   赵六              测试数据

e8                   吴七              测试数据

  • 写回答

1条回答 默认 最新

  • 大黄瓜de冬天 2021-10-15 17:10
    关注

    一行转多行,根据其中某列的值,以逗号分割:
    如果是sql语句:
    create table test100 (a varchar(100),b varchar(100),c varchar(100));
    insert into test100(a,b,c) values ('a1,b4,c1,d5,e8','张三,李四,王五,赵六,吴七','测试数据');
    -- 创建一个序列表(仅有一个字段:存储序列 1-1000),如下:
    create table var_index (id varchar(20));
    -- 我是示例只建了1到10
    insert into var_index(id) values ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10');
    SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(C.a, ',', G.ID ), ',',-1 ) IDS ,
    SUBSTRING_INDEX(SUBSTRING_INDEX(C.b, ',', G.ID ), ',',-1 ) IDSs,
    C.c
    FROM
    test100 C
    left JOIN var_index G ON G.ID <= (LENGTH(C.a)-LENGTH(REPLACE (C.a,',', '')) + 1)
    where
    1=1;
    初始数据查询结果:

    img

    转多行后效果:

    img

    以上是sql实现。如果解决了你的问题请采纳。您的肯定是我回答问题的动力。如果需要java后端的实现请回复我,我在整理给你。谢谢!

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 专家已采纳回答 10月19日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 武汉岩海低应变分析软件,导数据库里不显示波形图
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥30 CanMv K210开发板实现功能
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题