【问题标题】:Group and concatenate many rows to one将多行分组并连接为一个
【发布时间】:2011-04-20 20:25:50
【问题描述】:

我想将所有“文本”行“连接”成一行,结果得到一行。这甚至可能吗?我使用 MSSQL Server 2005。

【问题讨论】:

    标签: sql sql-server sql-server-group-concat


    【解决方案1】:

    我相信您正在寻找这样的东西:

    DECLARE @string nvarchar(max)
    SET @string = N''
    
    SELECT @string = @string + [Text] + N' ' FROM [YourTable]
    
    SELECT @string
    

    这会将 [Text] 列的所有值连接到一个变量中。然后,您可以选择变量以检索单行中的所有值。

    【讨论】:

      【解决方案2】:

      类似:

      DECLARE @result varchar(max)
      
      SELECT @result = COALESCE(@result + ' ','') +[Text] FROM [Table]
      SELECT @result
      

      【讨论】:

        【解决方案3】:

        使用 FOR XML 路径:

        SELECT [Text]+' ' AS 'text()' FROM _table FOR XML PATH('')
        

        另一个选项 - 使用字符串连接:

        DECLARE @s nvarchar(max)
        SELECT @s = ISNULL(@s, '') + t + ' '  FROM _table OPTION (MAXDOP 1)
        SELECT @s
        

        请注意,不能保证后一个可以正常工作,afaik,官方未定义多行结果集的“@s = @s + ...”行为。
        使用MAXDOP 1 提示此处是为了防止优化器创建并行执行计划,因为这肯定会产生不正确的结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-17
          • 2019-03-27
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2020-08-15
          相关资源
          最近更新 更多