SQL基于引用键连接重复值
我有下表SQL基于引用键连接重复值,sql,oracle,Sql,Oracle,我有下表 col A | Col B -------------- a | 1 -------------- a | 2 -------------- b | 1 -------------- b | 3 -------------- c | 1 我基本上是在寻找一个产生以下输出的SQL查询 col A | Col B -------------- a | "1:2" ----------
col A | Col B
--------------
a | 1
--------------
a | 2
--------------
b | 1
--------------
b | 3
--------------
c | 1
我基本上是在寻找一个产生以下输出的SQL查询
col A | Col B
--------------
a | "1:2"
--------------
b | "1:3"
--------------
c | "1"
这一定是一个非常简单的查询,但我现在无法理解。您可以使用函数来聚合字符串结果:
SELECT colA, '"' || ListAgg(colB, ':') WITHIN GROUP (ORDER BY colb) || '"'
FROM yourtable
GROUP BY colA;
ListAgg()
将要聚合的列作为第一个参数,将分隔符字符作为第二个参数。我们只需将开头和结尾的双引号连接到ListAgg结果,即可得到您要查找的最终结果。您可以使用函数聚合字符串结果:
SELECT colA, '"' || ListAgg(colB, ':') WITHIN GROUP (ORDER BY colb) || '"'
FROM yourtable
GROUP BY colA;
ListAgg()
将要聚合的列作为第一个参数,将分隔符字符作为第二个参数。我们只是将开头和结尾的双引号连接到ListAgg结果,以获得您要查找的最终结果。在Oracle中,此解决方案无法编译(语法错误)。Listag缺少组内的强制关键字和order_by子句。我很抱歉。我没有把剩下的必要的胡言乱语加进去。我的头一直停留在MySql的Group_Concat()函数上,它不需要组内的子句。非常感谢。它与我的Oracle版本(11g版本11.2.0.3.0-64位)配合使用。请提供更多信息,说明如何在其他DBMS(MySQL、MS SQL)中使用它?这可能对其他人有帮助。对于每个DBMS来说都是不同的。有些函数内置了字符串agg函数,而另一些函数则需要借助递归CTE才能实现。我百分之百肯定,对于每个DBMS,可能已经有几十个答案了。这是一件很难搜索的事情,因为如果你从来没有这样做过,你可能不会想到一个很好的搜索词。在Oracle中,这个解决方案不会编译(语法不正确)。Listag缺少组内的强制关键字和order_by子句。我很抱歉。我没有把剩下的必要的胡言乱语加进去。我的头一直停留在MySql的Group_Concat()函数上,它不需要组内的子句。非常感谢。它与我的Oracle版本(11g版本11.2.0.3.0-64位)配合使用。请提供更多信息,说明如何在其他DBMS(MySQL、MS SQL)中使用它?这可能对其他人有帮助。对于每个DBMS来说都是不同的。有些函数内置了字符串agg函数,而另一些函数则需要借助递归CTE才能实现。我百分之百肯定,对于每个DBMS,可能已经有几十个答案了。这是一件很难搜索的事情,因为如果你从来没有这样做过,你可能想不出一个很好的搜索词。什么版本的Oracle?Listag是自然的解决方案,但它仅在11.2版之后才可用。正确的语法:什么版本的Oracle?Listag是自然的解决方案,但它仅在11.2版之后才可用。对于正确的语法: