Sql 需要绑定值来代替ID(逗号分隔)

Sql 需要绑定值来代替ID(逗号分隔),sql,sql-server,Sql,Sql Server,我想用相应的值替换ID 示例:如果列由ID 1,2组成 我需要将1替换为“产品视频”,2替换为“安装”。 我可以使用用例,但无法找到一种方法来使用逗号分隔的ID的用例 SELECT BusinessFocus ,( SELECT stuff(( SELECT ', ' + BusinessFocus ,CASE WHEN Bus

我想用相应的值替换ID

示例:如果列由ID 1,2组成
我需要将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”转换为“产品视频,其他视频”的方法?如果是,为什么不尝试使用替换?明白了。谢谢你,明白了。非常感谢。