Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL基于引用键连接重复值_Sql_Oracle - Fatal编程技术网

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版之后才可用。对于正确的语法: