【问题标题】:How to concat all the entries of one column [SQL]如何连接一列的所有条目 [SQL]
【发布时间】:2020-09-16 15:44:11
【问题描述】:

如标题所述,使用以下 SQL 查询:

SELECT "Name"
FROM "ExampleTable"

我得到以下结果:

Name
----------------
ExampleName1
ExampleName2
ExampleName3

问题:如何修改查询,让所有的名字都显示在一行中,以便以后可以使用数组。

我尝试了什么: FOR XMLSTUFF - 不起作用

预期结果:

Name: ExampleName1, ExampleName2, ExampleName3.

【问题讨论】:

标签: sql string-aggregation


【解决方案1】:

如果你使用的是 SQL Server,你可以试试这个:

Select SUBSTRING( 
( 
     SELECT ',' + Name AS 'data()'
         FROM TableName FOR XML PATH('') 
), 2 , 1000) As Names

在 Fiddle 上查看:http://sqlfiddle.com/#!18/6ab0b3/6

或者可能是使用COALESCE 的一种简单方法,它根据传递的参数将单行中的多行组合成逗号分隔值:

Declare @val Varchar(MAX); 
Select @val = COALESCE(@val + ', ' + Name, Name) 
        From TableName Select @val;

select @val; // this will show all your data

在小提琴上检查这个:http://sqlfiddle.com/#!18/36112/2

另外,如果上面的屏幕截图出现问题,我会提供屏幕截图,以便您轻松理解步骤。

请注意:在上述过程中,我既没有使用任何 PRIMARY KEY,也没有设置它的自动增量,但在接下来的解释中,我使用了 PRIMARY KEY,因为我已经写了所有内容SSMS(Sql Server 管理工作室)

这是示例tblStudent 表的架构,其中设置了 PRIMARY KEY 和自动增量,如下所示:

接下来在里面输入一些虚拟值

最后写下我们的查询。

【讨论】:

  • 嘿,两种方式,都不起作用,FOR XML - incorrect syntax new 'data()' ,即使'data()'被删除,它也不起作用COALESCE - statement is only allowed inside a procedure and function block 。还是谢谢你的回答!
  • @user13047397 我已添加小提琴链接供您检查。完全按照其中提到的方式编写您的查询。
  • @user13047397 检查我的更新。我为您添加了屏幕截图,以便更好地了解我遵循的过程。希望这有助于获得您想要的完美结果。
  • 您好,感谢您的回答和出色的贡献! @noobprogrammer,我将在下周一试一试!
  • 不允许更改列属性,因此它并没有真正起作用,但仍然谢谢!您的回答很优质,可能会对某人有所帮助,所以我会接受您的回答!
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2010-11-01
  • 1970-01-01
相关资源
最近更新 更多