簡體   English   中英

在T-SQL中將多個行字段串聯為一列

[英]Concatenating multiple rows fields into one column in T-SQL

我正在編寫一個SQL查詢,其中需要對表執行子選擇,該表通常將返回多行。 我需要能夠將所有行中某個字段的結果連接到一個字段中以進行輸出。 這有可能,怎么樣?

例如,如果SQL查詢返回

id | field
1  | test1
2  | test2
3  | test3

我需要輸出的字段是“ test1 test2 test3”。 謝謝

這是for xml技巧:

    SELECT  field + ' ' as [text()]
    FROM    YourTable
    FOR XML PATH ('')

打印:

test1 test2 test3

它通常與outer apply一起使用,以對每行執行一次。

declare @sample table(id int, field varchar(20))
insert into @sample values(1,'test1')
insert into @sample values(2,'test2')
insert into @sample values(3,'test3')
declare @result varchar(max) set @result = ''
select @result = @result + ' '+field from @sample
select @result

SQLCLR自定義聚合器將是替代的(更好的閱讀方式)解決方案

作為現有答案的補充。 嘗試在要使用的列名中包括COALESCE表達式。 這樣可以避免在串聯字符串中包含空值,並避免列表看起來像這樣。 注意冗余的空格。

field1 field2   field4 field

可以在此處找到更多詳細信息。

GO

DECLARE @tableName VARCHAR(MAX)
SELECT  @tableName = COALESCE(@tableName + ' ' ,'') + Name
FROM    sys.tables
SELECT  @tableName

GO

嘗試這個:

SELECT RTRIM(field)
  FROM (
                SELECT field + ' ' field
                    FROM <YOUR_TABLE>
                    FOR XML PATH('')
             ) a

可以用光標做。

declare @field nvarchar(max)
declare @concat nvarchar(max)
set @concat = ''
declare @cursor cursor
set @cursor = cursor for select field from table
open @cursor
fetch next from @cursor into @field
while @@fetch_status = 0
begin
  set @concat = concat(@concat,@field)
  fetch next from @cursor into @field
end

您的工作是在連接的字符串之間添加空格:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM