【发布时间】:2013-06-15 05:00:07
【问题描述】:
我正在移植一个我最初编写的应用程序,以便使用 PHP 和 MySQL 数据库在 Apache 上运行。其中一个查询使用了Concat_WS 和Group_Concat 的MySQL 函数,首先将几个不同的列连接成一个字符串,然后连接由Group_By 子句组合在一起的所有项目。
举个例子:
ID Name Candy
1 John M&Ms
1 John KitKat
查询:
Select Group_Concat(Concat_WS('-',Name, Candy) Separator '00--00') as UserCandy
From ExampleTable
Group By ID
结果:
UserCandy
John-M&Ms00--00John-KitKat
现在,我正在尝试使用 PHP 5.4+ 在 SQL Server 2008 中实现相同的结果。
我尝试过的:
SELECT Stuff(name + ';' + candy, 1, 0, '-----') AS UserCandy
FROM test
问题can be seen in the fiddle that I have setup。
预期的结果是:
-----John;MMs-----John;KitKat
最后,当我向组合中添加更多列时,这变得更加困难。我想合并ID相同的结果(如上图)。这对group_concat 非常有效,因为它会自动合并已分组在一起的行。
【问题讨论】:
-
@bluefeet 我已经看到了这个问题,但我试图避免使用 XML。我真的很想保持我在以前版本的应用程序中使用的格式。
-
有多种方法可以获取所需格式的数据,但在 SQL Server 中,没有简单的方法可以将多行数据连接成一行。
-
@bluefeet 那么我怎样才能改变这个问题以便它得到回答而不是关闭呢?我今天已经阅读了大量关于这个主题的书,但我自己仍然没有得到它(显然我现在在这里)
-
@Whathaveyoutried 您可能想解释为什么重复项没有回答您的问题,“相同格式”有点含糊,查询看起来是否存在问题或格式为结果还是……?
-
@JoachimIsaksson 当我自己尝试使用
for xml path时,我得到了一个带有xml 标题的结果,这是我不喜欢的。类似<name>name_here</name>
标签: sql-server-2008 tsql concatenation group-concat