如何使用SQL查询从字符串列表中获取字符串
我的表A如下:如何使用SQL查询从字符串列表中获取字符串,sql,sql-server-2008,Sql,Sql Server 2008,我的表A如下: +--------+----------------------+ | Id | Ref | +--------+----------------------+ | 1 | RN1-102,RN2-103 | | 2 | RN1-106 | | 3 | RN2-203 | | 4 | NULL | |
+--------+----------------------+
| Id | Ref |
+--------+----------------------+
| 1 | RN1-102,RN2-103 |
| 2 | RN1-106 |
| 3 | RN2-203 |
| 4 | NULL |
| 5 | RN1-104|,RN2-107 |
| 6 | RN1-101,RN2-105 |
| 7 | RN1-100,RN2-109 |
+--------+----------------------+
+--------------------+
| Distinct Ref data |
+--------------------+
| RN1-100 |
| RN1-101 |
| RN1-102 |
| RN1-104 |
| RN1-106 |
| RN2-103 |
| RN2-105 |
| RN7-107 |
| RN2-109 |
| RN2-203 |
+--------------------+
我需要一个不同于表a的输出参考,如下所示:
+--------+----------------------+
| Id | Ref |
+--------+----------------------+
| 1 | RN1-102,RN2-103 |
| 2 | RN1-106 |
| 3 | RN2-203 |
| 4 | NULL |
| 5 | RN1-104|,RN2-107 |
| 6 | RN1-101,RN2-105 |
| 7 | RN1-100,RN2-109 |
+--------+----------------------+
+--------------------+
| Distinct Ref data |
+--------------------+
| RN1-100 |
| RN1-101 |
| RN1-102 |
| RN1-104 |
| RN1-106 |
| RN2-103 |
| RN2-105 |
| RN7-107 |
| RN2-109 |
| RN2-203 |
+--------------------+
我尝试了以下查询:
select distinct Ref from tableA
请帮帮我。试试这个
SELECT distinct Split.a.value('.', 'VARCHAR(100)') REF
FROM (select ID,Cast ('<M>'
+ replace(Replace(REF, ',', '</M><M>'),'&','&')
+ '</M>' AS XML) AS Data from #Table) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)
这个问题和我以前回答的很相似。我在这个答案中提供了两种方法,一种是使用递归,另一种不是 但是,如果已经有一个表存储了ref键,那么第三个选项如下:
create table ref_table (ref varchar(10), ref_name varchar(100), primary key (ref));
select
r.ref
from
ref_table r
where
EXISTS (
select 1
from tableA a
where a.ref like '%'+r.ref+'%' -- or ','+a.ref+',' like '%,'+r.ref+',%'
)
我认为模式是一种糟糕的做法。但是试着检查一下,它也有同样的问题:u提供的表不是一个好的实践一行中有多个值。试着更改模式。