【问题标题】:SQL Query to List要列出的 SQL 查询
【发布时间】:2011-06-03 14:25:57
【问题描述】:

我在存储过程中有一个表变量。我想要的是在一列中找到所有唯一值并将它们加入逗号分隔的列表中。我已经在一个存储过程中,所以我可以以某种方式做到这一点;但是,我很好奇我是否可以通过查询来做到这一点。我在 SQL Server 2008 上。这个查询得到了我想要的值:

SELECT DISTINCT faultType FROM @simFaults;

有没有办法(使用 CONCAT 或类似的方法)可以将列表作为单个逗号分隔值获取?

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    这在测试数据集上对我有用。

    DECLARE @MyCSV Varchar(200) = ''
    
    SELECT @MyCSV = @MyCSV +
    CAST(faulttype AS Varchar) + ','
    FROM @Simfaults
    GROUP BY faultType
    
    SET @MyCSV = LEFT(@MyCSV, LEN(@MyCSV) - 1)
    
    SELECT @MyCSV
    

    最后一部分用于修剪尾随的逗号。

    【讨论】:

    • +1,您可以通过使用 COALESCE 方法避免对最后一部分的需要:SELECT @MyCSV = COALESCE(@MyCSV + ',', '') + faulttype
    【解决方案2】:

    +1 to JNK - 您将看到的另一种不需要变量的常见方式是:

    SELECT DISTINCT faulttype + ','
    FROM @simfaults
    FOR XML PATH ('')
    

    请注意,如果 faulttype 包含诸如“

    【讨论】:

    • 我接受了 JNK 的回答,因为它允许我剪掉最后一个逗号。为您的答案 +1,非常酷。
    【解决方案3】:

    我们就是这样做的

    create table #test (item int)
    insert into #test 
    values(1),(2),(3)
    
    select STUFF((SELECT  ', ' + cast(Item as nvarchar) 
            FROM #test 
            FOR XML PATH('')), 1, 2, '')
    

    逗号后面没有空格;

    select STUFF((SELECT  ',' + cast(Item as nvarchar) 
            FROM #test 
            FOR XML PATH('')), 1,1, '')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多