一尘不染

SQL 2005合并/将多行合并为一列

sql

我们有些SQL杂语。说我有一个看起来像这样的结果…

61E77D90-D53D-4E2E-A09E-9D6F012EB59C | A
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | B
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | C
61E77D90-D53D-4E2E-A09E-9D6F012EB59C | D
7ce953ca-a55b-4c55-a52c-9d6f012ea903 | E
7ce953ca-a55b-4c55-a52c-9d6f012ea903 | F

有没有一种方法可以将这些结果在SQL中分组以返回为

61E77D90-D53D-4E2E-A09E-9D6F012EB59C | ABCD
7ce953ca-a55b-4c55-a52c-9d6f012ea903 | 英孚

有什么想法的人吗?

非常感谢

戴夫


阅读 149

收藏
2021-03-08

共1个答案

一尘不染

我更喜欢定义一个自定义的用户定义的聚合。 是一个UDA的示例,它可以完成非常接近您要求的功能。

为什么使用用户定义的聚合而不是嵌套的SELECT?一切都与性能以及您愿意忍受的东西有关。对于少量元素,您当然可以避免使用嵌套的SELECT,但是对于较大的“
n”,您会注意到查询计划实际上对输出列表中的每一行运行一次嵌套的SELECT。如果您要谈论大量的行,这可能是死亡之吻。使用UDA,可以一次汇总这些值。

当然,要权衡的是UDA要求您使用CLR进行部署,而这并不是很多人经常做的事情。在Oracle中,这种特殊情况会更好一些,因为您可以直接使用PL / SQL创建用户定义的聚合,但是我离题了…

2021-03-08