【发布时间】:2015-04-07 12:18:12
【问题描述】:
我有一个包含三列的表:EmployeeID、Department、Location
每位员工可能有多个部门,并且可以位于多个位置。
通过对任何关系型数据库的 SQL 查询, 我需要针对每个 EmployeeID 返回不同的部门集(用连字符分隔)、不同的位置集(用连字符分隔)。
对于DB中的以下记录,
EMP1,人力资源部,加尔各答
EMP1,人力资源部,德里
EMP1,设施,孟买
EMP1,设施,加尔各答
我需要得到以下结果:EMP1, HR-Facility, Kolkata-Delhi-Mumbai
欢迎任何帮助。
【问题讨论】:
-
您使用的是什么数据库?请适当标记您的问题。
-
@GordonLinoff,查询必须是 ANSI-SQL 才能在任何 RDBMS 中运行
-
我认为这是不可能的,因为 ANSI SQL 标准中没有定义行内聚合函数。通常,您可以使用 SQL Server 的 STUFF 或 Oracle 的 LISTAGG 来实现此目的。如果它必须保持通用,您最好编写代码(C#、java 等)来进行聚合。
-
@booyaa 好吧,你可以用子查询来做到这一点......如果有
sumover varchars,但没有。耻辱 :) 也许您可以创建一个用户定义的函数,该函数对于不同的数据库引擎会有所不同?在任何情况下,针对 ANSI-SQL 进行编码并期望它在任何 RDBMS 上运行(并且运行良好!)都是幼稚的。它仍然不能那样工作。 -
我认为 ANSI_SQL 也不可能。你需要一个数据库特定的方法来解决这个问题,或者一个 PL/SQL 块