Sql 需要绑定值来代替ID(逗号分隔)
我想用相应的值替换ID 示例:如果列由ID 1,2组成Sql 需要绑定值来代替ID(逗号分隔),sql,sql-server,Sql,Sql Server,我想用相应的值替换ID 示例:如果列由ID 1,2组成 我需要将1替换为“产品视频”,2替换为“安装”。 我可以使用用例,但无法找到一种方法来使用逗号分隔的ID的用例 SELECT BusinessFocus ,( SELECT stuff(( SELECT ', ' + BusinessFocus ,CASE WHEN Bus
我需要将1替换为“产品视频”,2替换为“安装”。 我可以使用用例,但无法找到一种方法来使用逗号分隔的ID的用例
SELECT BusinessFocus
,(
SELECT stuff((
SELECT ', ' + BusinessFocus
,CASE
WHEN BusinessFocus = 1
THEN 'Product Videos'
WHEN BusinessFocus = 2
THEN 'Installation Videos'
WHEN BusinessFocus = 3
THEN 'Other Videos'
END AS BFocusname
WHERE BusinessFocus IN (
SELECT val
FROM dbo.split(PartnerMaster.BusinessFocus, ',')
)
FOR XML PATH('')
), 1, 1, '')
) AS BusinessFocusNames
FROM PartnerMaster
实际结果:
预期结果:
1,3 | Product Videos,Installation Videos
如果您只是想将“1,3”转换为“产品视频,其他视频”,您可以使用下面的替换-
DECLARE @BusinessFocus VARCHAR(200) = '1,3'
SELECT @BusinessFocus,
REPLACE(REPLACE(@BusinessFocus,'1','Product Videos'),'3','Other Videos')
注意:如图所示,您可以使用一个以上的替换。如果您只想将“1,3”转换为“产品视频,其他视频”,您可以按如下所示使用替换-
DECLARE @BusinessFocus VARCHAR(200) = '1,3'
SELECT @BusinessFocus,
REPLACE(REPLACE(@BusinessFocus,'1','Product Videos'),'3','Other Videos')
注意:如图所示,您可以再使用一次替换。如果您没有将这些业务焦点值存储在表中的其他位置,请使用CTE 模式:
CREATE TABLE #PartnerMaster (BusinessFocus VARCHAR(100), BusinessFocusNames VARCHAR(MAX))
INSERT INTO #PartnerMaster (BusinessFocus)
SELECT '1,2' UNION ALL SELECT '3' UNION ALL SELECT '2,3'
现在加入Charindex
,并用为XML路径创建逗号分隔的列表
;WITH CTE AS(
SELECT '1' BusinessFocus, 'Product Videos' BusinessFocusNames
UNION ALL
SELECT '2' BusinessFocus, 'Installation Videos' BusinessFocusNames
UNION ALL
SELECT '3' BusinessFocus, 'Other Videos' BusinessFocusNames
)
SELECT P.BusinessFocus
, STUFF((SELECT ','+C.BusinessFocusNames FROM CTE C
WHERE CHARINDEX(C.BusinessFocus,P.BusinessFocus)>0
FOR XML PATH('')),1,1,'') AS BusinessFocusNames
FROM #PartnerMaster P
结果:
+---------------+------------------------------------+
| BusinessFocus | BusinessFocusNames |
+---------------+------------------------------------+
| 1,2 | Product Videos,Installation Videos |
| 3 | Other Videos |
| 2,3 | Installation Videos,Other Videos |
+---------------+------------------------------------+
如果您没有将这些业务焦点值存储在表中的其他位置,请使用CTE 模式:
CREATE TABLE #PartnerMaster (BusinessFocus VARCHAR(100), BusinessFocusNames VARCHAR(MAX))
INSERT INTO #PartnerMaster (BusinessFocus)
SELECT '1,2' UNION ALL SELECT '3' UNION ALL SELECT '2,3'
现在加入Charindex
,并用为XML路径创建逗号分隔的列表
;WITH CTE AS(
SELECT '1' BusinessFocus, 'Product Videos' BusinessFocusNames
UNION ALL
SELECT '2' BusinessFocus, 'Installation Videos' BusinessFocusNames
UNION ALL
SELECT '3' BusinessFocus, 'Other Videos' BusinessFocusNames
)
SELECT P.BusinessFocus
, STUFF((SELECT ','+C.BusinessFocusNames FROM CTE C
WHERE CHARINDEX(C.BusinessFocus,P.BusinessFocus)>0
FOR XML PATH('')),1,1,'') AS BusinessFocusNames
FROM #PartnerMaster P
结果:
+---------------+------------------------------------+
| BusinessFocus | BusinessFocusNames |
+---------------+------------------------------------+
| 1,2 | Product Videos,Installation Videos |
| 3 | Other Videos |
| 2,3 | Installation Videos,Other Videos |
+---------------+------------------------------------+
您可以将游标与动态SQL一起使用。您是否将BusinessFocus名称存储在任何其他表中?否。因为记录数只有3,所以没有创建表。您是否正在寻找将“1,3”转换为“产品视频,其他视频”的方法?如果是,为什么不尝试使用替换?您可以使用带有动态SQL的游标。您是否将BusinessFocus名称存储在任何其他表中?否。因为记录数只有3,所以没有创建表。您是否只是在寻找将“1,3”转换为“产品视频,其他视频”的方法?如果是,为什么不尝试使用替换?明白了。谢谢你,明白了。非常感谢。