我有一个包含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
答案 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]”值对位置进行硬编码,或者想出一种迭代解决方案,如果您拥有的设施数量不断增加,则可以遍历所有位置。>