необходимо связать значения вместо идентификаторов (через запятую) - PullRequest
0 голосов
/ 27 июня 2019

я хочу заменить идентификаторы на соответствующие значения

пример: если столбец состоит из идентификаторов 1,2
Мне нужно заменить 1 на «Видео о продукте», 2 на «Установка». Я могу использовать case, но не могу найти способ использовать case для разделенных запятыми идентификаторов

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

Фактический результат:

actual result

Ожидаемый результат:

   1,3    |  Product Videos,Installation Videos

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Если вы не храните эти значения бизнес-фокуса где-то еще в таблице, используйте 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 и сделайте их запятымиразделенный список с For XML Path

;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   |
+---------------+------------------------------------+
1 голос
/ 27 июня 2019

Если вы просто хотите преобразовать «1,3» в «Видеоролики о продукции, другие видео», вы можете использовать REPLACE, как показано ниже -

DECLARE @BusinessFocus VARCHAR(200) = '1,3'

SELECT @BusinessFocus, 
REPLACE(REPLACE(@BusinessFocus,'1','Product Videos'),'3','Other Videos')

Примечание: вы можете использовать еще одну REPLACE, как показано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...