Sql server 2012 如何在T-Sql中查找逗号分隔的另一列的数值?
我有一个包含3个字段的表,如下所示,只想选择[NewFacility]中有匹配[Facility]值的行 NewFacility字段的数值用逗号分隔 本表:Sql server 2012 如何在T-Sql中查找逗号分隔的另一列的数值?,sql-server-2012,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
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
表信息
有关您的具体示例:
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)'))
选择项目
,设施
,新设施
,ISNULL(i.value('n[1]”,'varchar(10)”,“”)
,ISNULL(i.value('n[2]”,'varchar(10)”,“”)
,ISNULL(i.value('n[3]”,'varchar(10)”,“”)
从(选择项目
,设施
,新设施
,将(XML,“+替换(NewFacility,”,“)+”)转换为X
来自[表名称])标准贯入试验
交叉应用Spt.X.nodes('/r')X(i)
其中,贷款(i.value('n[1]”,'varchar(10)'
,i.value('n[2]”,'varchar(10)'
,i.value('n[3],'varchar(10'))
其工作原理是将字符串转换为XML,并将逗号分隔的字符串作为一系列节点进行访问。对于每个潜在节点,您必须使用另一个“n[x]”值对位置进行硬编码,或者提出一个迭代解决方案,以穿透所有位置,例如,设施数量不断增加。在列中存储逗号分隔的值列表是一个糟糕的设计决策。
项是否可以重复值?同意糟糕的设计。