如何在T-Sql中用逗号分隔另一列的值来查找一列的数值?

时间:2018-08-14 12:53:09

标签: sql-server-2012

我有一个包含3个字段的表,如下所示,并且只选择[NewFacility]中具有匹配的[Facility]值的行。

NewFacility字段具有用逗号分隔的数值。

当前表:

Item    Facility    NewFacility
Car 1               1
Van 1               2,4
Bus 3               2,4
Truck   4           2,3,4

预期结果:

Item    Facility    NewFacility
Car 1               1
Truck   4           2,3,4

表格信息

enter image description here

1 个答案:

答案 0 :(得分:0)

对于您的具体示例:

SELECT Item
     , Facility
     , NewFacility
     , ISNULL(i.value('n[1]','varchar(10)'), '') 
     , ISNULL(i.value('n[2]','varchar(10)'), '') 
     , ISNULL(i.value('n[3]','varchar(10)'), '') 
FROM (SELECT Item
           , Facility
           , NewFacility
           , CONVERT(XML,'<r><n>' + REPLACE(NewFacility, ',', '</n><n>') + '</n></r>') AS X 
      FROM [Table_Name])  Spt 
CROSS APPLY Spt.X.nodes('/r') x(i) 
WHERE Facility in (i.value('n[1]','varchar(10)')
                , i.value('n[2]','varchar(10)') 
                , i.value('n[3]','varchar(10)')) 

这通过将字符串转换为XML并以一系列节点访问逗号分隔的字符串来工作。对于每个潜在节点,您必须使用另一个“ n [x]”值对位置进行硬编码,或者想出一种迭代解决方案,如果您拥有的设施数量不断增加,则可以遍历所有位置。