SQL Server中的多对多比较
在SQL Server中,该列包含一些逗号分隔格式的中心代码,如 000070001180000700012000007001230000700163 与相同值比较的值,但中心代码分隔顺序不同,如0000700012300007000118000070001200000700163SQL Server中的多对多比较,sql,sql-server,Sql,Sql Server,在SQL Server中,该列包含一些逗号分隔格式的中心代码,如 000070001180000700012000007001230000700163 与相同值比较的值,但中心代码分隔顺序不同,如0000700012300007000118000070001200000700163 如何比较SQL Server中的多对多值。请帮助任何人解决此问题。您不应该将所有值都放在一个字符串中。在将数据引入表中之前,请尝试解析数据,以便可以将每个元素作为varchar添加到表中的新行中。之后,可以更容易地将
如何比较SQL Server中的多对多值。请帮助任何人解决此问题。您不应该将所有值都放在一个字符串中。在将数据引入表中之前,请尝试解析数据,以便可以将每个元素作为varchar添加到表中的新行中。之后,可以更容易地将整个列与一个值进行比较。要在CostElementName中查找具有相同值且顺序相同/不相同的行,请执行以下操作:
declare @t table
(
id int identity,
CostElementGroup varchar(10),
CostElementName varchar(max)
);
insert into @t
(
CostElementGroup, CostElementName
)
values ('A', '1, 2, 3, 4, 5'), ('A', '5, 4, 3, 2, 1'),
('A', '3, 4, 5'), ('A', '3, 5, 4'),
('A', '1, 2, 3'), ('A', '1, 2');
select *
from @t as a
join @t as b on a.CostElementGroup = b.CostElementGroup and a.id <> b.id
where
--same number of elements in the comma delimited string...
len(a.CostElementName) - len(replace(a.CostElementName, ',', '')) = len(b.CostElementName) - len(replace(b.CostElementName, ',', ''))
and not exists --...without any diff
(
select ltrim(x.value)
from string_split(a.CostElementName, ',') as x
except
select ltrim(y.value)
from string_split(b.CostElementName, ',') as y
);
修正你的数据模型!不要在字符串中存储多个值!你需要修正你的设计;如果不存储分隔值,则不会出现问题。您使用的是哪个版本的SQL Server?你期望的输出是什么?