请教如何按一列分解转为多行?

zjl8008 2019-12-09 09:43:01
有如下数据,by2列可能存在,号连接的字符串,如何把带,号的列分成2行,其他列数据不变。
id brxm rq by2
60620 李代福 2019-11-18 11:21:02.000 4358685,4358678
60621 张志萍 2019-11-18 11:09:24.000 4358735,4358730
60636 梁淑华 2019-11-18 14:39:26.000 4358833,4358827
60638 孙瑞瑜 2019-11-18 14:25:48.000 4355180,4358473
61125 刘素珍 2019-11-21 14:23:04.000 4366008,4366007
61383 赵淑凤 2019-11-22 14:52:56.000 4368627,4368624
61394 邢国芹 2019-11-22 15:50:47.000 4369032,4369027,4369028
61481 张树国 2019-11-26 08:17:59.000 4374604,4374606
61483 王淑芬 2019-11-26 10:07:03.000 4375743,4375750
61485 张雨魁 2019-11-26 09:55:29.000 4375366,4375365

如第一行李代福变成2行
60620 李代福 2019-11-18 11:21:02.000 4358685
60620 李代福 2019-11-18 11:21:02.000 4358678
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjl8008 2019-12-12
  • 打赏
  • 举报
回复
感谢楼上2位!!
文盲老顾 2019-12-09
  • 打赏
  • 举报
回复
cross split一下 select id,brxm,rq,by3 from table a cross apply ( select value as by3 from dbo.splitStr(by2,',') ) b
CREATE FUNCTION [dbo].[SplitStr]
(	
	@string nvarchar(max), 
	@symbol nvarchar(10)
)
RETURNS @table TABLE(id int identity,value nvarchar(max))
AS
begin 
	DECLARE @splitlen int
    SET @splitlen=LEN(@symbol)-1
    WHILE CHARINDEX(@symbol,@string)>0
    BEGIN
        INSERT @table(value) VALUES(LEFT(@string,CHARINDEX(@symbol,@string)-1))
        SET @string=STUFF(@string,1,CHARINDEX(@symbol,@string)+@splitlen,'')
    END
    INSERT @table(value) VALUES(@string)
    return
end
北冥小渔夫 2019-12-09
  • 打赏
  • 举报
回复
SELECT 
       id,  brxm,  rq,
       by2 = SUBSTRING(  t1.by2,  t2.number, CHARINDEX(',', t1.by2 + ',', t2.number) -t2.number  )
FROM   tworows   t1,  master..spt_values  t2
WHERE  t2.type = 'P' AND CHARINDEX(',', ',' + t1.by2, t2.number) = t2.number
GROUP BY  t1.id,  t1.brxm,  t1.rq,
       SUBSTRING(  t1.by2, t2.number,  CHARINDEX(',', t1.by2 + ',', t2.number) -t2.number )

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧