当前位置: 首页 > 面试题库 >

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

强阳曜
2023-03-14
问题内容

我们有些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 | 英孚

有什么想法的人吗?

非常感谢

戴夫


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我正在尝试不同的JOIN查询,但没有得到想要的结果。 我有2张桌子: 我找不到想要的结果。 我想得到以下结果: 问题答案: 您不能具有这样的动态列数,但是可以 将数据连接 成字符串: 或者您可以使用或手动 旋转行( 我更喜欢后一种方法,对我来说似乎更灵活,但是在某些情况下可以大大减少代码量): 您还可以将前面的语句转换为 动态SQL, 如下所示:

  • 问题内容: 假设我在MySQL数据库中有两个表。 表格1: 表2: 从数据库中选择行时,是否有任何方法可以将第二个表中的行作为列连接到第一个表中? 直接从MySQL查询获得的期望结果是: 谢谢你的帮助! 问题答案: 这种数据转换类型称为PIVOT。MySQL没有枢轴函数,但是您可以使用带有表达式的聚合函数来复制它: 请参阅带有演示的SQL Fiddle。 这也可以使用您的多个联接来编写,并且您将在

  • 问题内容: 我正在使用SQL Server2008。我具有下表中的数据: 我想以这种格式获取数据: 我怎样才能做到这一点? 问题答案: 使用PIVOT您可以执行以下操作 产生 查看有效的Data.SE示例 在不支持PIVOT的数据库中,您可以改为对表进行多次联接。尽管您可能还是想这样做,但是正如GBN所指出的那样,因为我们没有使用聚合。 查看有效的Data.SE示例

  • 我在同一个excel表中有3000个类似于这些表的表: PS:我只需要csv表中指定的信息

  • 我必须将多个PDF合并为一个PDF。 我正在使用iText。sharp库和collect转换了代码并尝试使用它(从这里)实际的代码是C#,我将其转换为VB.NET。 我现在收到以下错误: 已添加具有相同密钥的项目。 我做了一些调试,并将问题归结为以下几行: 为什么会出现这种错误?

  • 问题内容: 我有第1列和第2列,并希望将它们合并到同一表的第3列中。如果第2列为空,则显示第1列的值;如果第1列为空,则它们显示第2列的数据。如果它们都为空,则显示为空。我尝试了两件事: 1)使用CONCAT 。 仅当两个列都不为null时,它才合并列。否则,它只是将null声明为null。 2)使用(第1栏+第2栏)。 。 没有显示所需的输出。 我正在用Java编写此代码。谢谢 问题答案: us