Удаление дубликатов при преобразовании нескольких строк в CSV с использованием SQL - PullRequest
0 голосов
/ 05 июля 2018

Я создаю представление, в котором мне нужно вытащить все строки одного столбца и преобразовать их в формат CSV.

SELECT 
    SUBSTRING((SELECT ',' + CAST(s.marketConfigId AS varchar(MAX)) 
               FROM [Metric].[MetricGoalDefMarket] s 
               WHERE [metricGoalDefId]=21 
               ORDER BY s.marketConfigId 
               FOR XML PATH('')),2,200000) AS marketConfigID 

Использование вышеуказанного запроса может создать формат CSV, но он также отображает дубликаты. Когда вы запускаете вышеуказанный запрос, он отображает вывод как

**marketConfigID**
751,751,742,751,751,784,1850,737

Как мне удалить дубликаты?

PS: Поскольку я создаю представление, я не хочу использовать функции, как я вижу, используя dbo.DistinctList из здесь может удалять дубликаты

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Кажется, distinct будет работать:

SELECT SUBSTRING((SELECT DISTINCT ',' + CAST(s.marketConfigId AS varchar(MAX)) 
                  FROM [Metric].[MetricGoalDefMarket] s 
                  WHERE [metricGoalDefId]=21 
                  ORDER BY s.marketConfigId 
                  FOR XML PATH('')
                  ), 2,200000) AS marketConfigID

Вам не нужно использовать substring(), вместо этого вы можете использовать stuff():

SELECT STUFF ( (SELECT DISTINCT ',' + CAST(s.marketConfigId AS varchar(MAX)) 
                FROM [Metric].[MetricGoalDefMarket] s 
                WHERE [metricGoalDefId]=21 
                FOR XML PATH('')
                ), 1, 1, ''
             ) AS marketConfigID 
0 голосов
/ 05 июля 2018

Вы пробовали DISTINCT?

Редактировать: Извинения считают, что я неправильно прочитал ваш запрос Я думаю, что вы хотите получить marketConfigIds, используя запрос дополнительного выбора (применяя DISTINCT), а не на внешнем уровне, как я сделал ниже

SELECT DISTINCT
    SUBSTRING((SELECT ',' + CAST(s.marketConfigId AS varchar(MAX)) 
               FROM [Metric].[MetricGoalDefMarket] s 
               WHERE [metricGoalDefId]=21 
               ORDER BY s.marketConfigId 
               FOR XML PATH('')),2,200000) AS marketConfigID 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...