Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL查询从字符串列表中获取字符串_Sql_Sql Server 2008 - Fatal编程技术网

如何使用SQL查询从字符串列表中获取字符串

如何使用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 | |

我的表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       |
+--------------------+
我需要一个不同于表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>'),'&','&amp;')
                                + '</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提供的表不是一个好的实践一行中有多个值。试着更改模式。