gpt4 book ai didi

sql - 将多个逗号分隔的列拆分为行

转载 作者:行者123 更新时间:2023-12-03 02:26:50 29 4
gpt4 key购买 nike

我有一个表(SQL Server),其中多个列中有逗号分隔的值,如下所示:

Rule_ID    ListType_ID    Values
1 1,2 100,200
2 3,4 300,400

我想拆分逗号分隔值并将它们转换为行。

所需的输出必须如下所示:

Rule_ID    ListType_ID    Values
1 1 100
1 2 200
2 3 300
2 4 400

我尝试了以下查询:

DECLARE @TEMP AS TABLE (
[Rule_ID] INT,
[ListType_ID] VARCHAR(MAX),
[Values] VARCHAR(MAX)
)

INSERT INTO @TEMP
SELECT 1, '1,2', '100,200'
UNION ALL
SELECT 2, '3,4', '300,400'

SELECT
[Rule_ID],
PARSENAME(REPLACE(Split1.b.value('.', 'VARCHAR(100)'),'-','.'),1) AS [ListType_ID],
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) AS [Values]
FROM
(
SELECT [Rule_ID],
CAST ('<M>' + REPLACE([ListType_ID], ',', '</M><M>') + '</M>' AS XML) AS [ListType_ID],
CAST ('<M>' + REPLACE([Values], ',', '</M><M>') + '</M>' AS XML) AS [Values]
FROM @TEMP
) AS A
CROSS APPLY [Values].nodes ('/M') AS Split(a)
CROSS APPLY [ListType_ID].nodes ('/M') AS Split1(b)
ORDER BY [Rule_ID], [ListType_ID], [Values]

此查询返回以下输出,该输出与所需的输出不同:

Rule_ID    ListType_ID    Values
1 1 100
1 1 200
1 2 100
1 2 200
2 3 300
2 3 400
2 4 300
2 4 400

请帮帮我......!!!!!

最佳答案

请检查以下 SQL 脚本

为了在 SQL 中分割字符串,我使用了以下用户定义之一 SQL split string functions

这些函数返回我在 WHERE 子句中使用的拆分字符串的顺序,以便我可以一对一映射字段值

/*
create table Table_1 (
Rule_ID int, ListType_ID varchar(max), [Values] varchar(max)
)
insert into Table_1 select 1,'1,2','100,200'
insert into Table_1 select 2,'3,4','300,400'
*/
select
Rule_ID,
idlist.val as ListType_ID,
valueslist.val as [Values]
from Table_1
cross apply dbo.SPLIT(ListType_ID,',') as idlist
cross apply dbo.SPLIT([Values],',') as valueslist
where
idlist.id = valueslist.id

关于sql - 将多个逗号分隔的列拆分为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50482648/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com