我正在创建一个视图,在其中需要拉出一列的所有行并将其转换为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:在创建视图时,我不想使用here中的dbo.DistinctList可以删除重复项的函数
答案 0 :(得分:2)
似乎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
答案 1 :(得分:1)
您尝试过DISTINCT吗?
编辑:抱歉,我误读了您的查询。我认为您想使用子选择查询(应用DISTINCT)来获取marketConfigIds,而不是像我在下面这样在外部级别获取
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