Sql表如何分列查询

etonchan 2019-05-17 09:12:26
我有表AAA如下明细:
订单号 货品明细
A1001 苹果,香蕉
A1002 葡萄
A1003 雪梨,西瓜,葡萄

想按下面格式查询,请帮忙看看,谢谢?
订单号 序号 货品
A1001 1 苹果
A1001 2 香蕉
A1002 1 葡萄
A1003 1 雪梨
A1003 2 西瓜
A1003 3 葡萄
...全文
317 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2019-05-17
  • 打赏
  • 举报
回复
建议你运行一下,这就是你的大概结果,序号自己加。
etonchan 2019-05-17
  • 打赏
  • 举报
回复
不是常见问题,请看清楚我要的结果,谢谢
卖水果的net 2019-05-17
  • 打赏
  • 举报
回复
这个需求,是常见的问题
卖水果的net 2019-05-17
  • 打赏
  • 举报
回复
create table test(id int,value varchar(30)) insert into test values(1,'aa,bb') insert into test values(2,'aaa,bbb,ccc') go select * from test go select a.id, b.value from( select id, [value] = convert(xml,'<v>' + replace([value], ',', '</v><v>') + '</v>') from test )a outer apply( select value = n.v.value('.', 'varchar(100)') from a.[value].nodes('/v') n(v) )b go drop table test go
二月十六 2019-05-17
  • 打赏
  • 举报
回复

--新建函数:
CREATE FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字符串
@split VARCHAR(10) --数据分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO

--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([订单号] nvarchar(25),[货品明细] nvarchar(28))
Insert #T
select N'A1001',N'苹果,香蕉' union all
select N'A1002',N'葡萄' union all
select N'A1003',N'雪梨,西瓜,葡萄'
Go
--测试数据结束
SELECT 订单号,
id AS 序号,
t.col AS 货品
FROM #T
CROSS APPLY
(SELECT * FROM dbo.f_splite([货品明细], ',') ) t;


22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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