【问题标题】:Oracle Concatenate Column value in a single row单行中的 Oracle 连接列值
【发布时间】:2013-10-27 15:20:59
【问题描述】:

假设我有一个N:N 表关系,并且我正在它们之间进行连接,问题是结果有许多具有相同值的行,我想在一个 row 中恢复,其中包含ids 那些。
实际返回的结果如下所示。

    ID_STREET     STREET      COUNTRY       REGION    
    ------------------------------------------------
    1             street-1    country-1     region-1     
    2             street-1    country-1     region-1
    3             street-2    country-2     region-2  

我想得到它

        ID_STREET     STREET      COUNTRY       REGION   DUPLICATED 
    ---------------------------------------------------------------
    1             street-1    country-1     region-1     1,2
    3             street-2    country-2     region-2     3

表定义看起来像

-------------------------         --------------------------
        STREET                            COUNTRY
-------------------------         --------------------------
ID   NUMBER NOT NULL              ID   NUMBER NOT NULL
NAME VARCHAR2(45) NOT NULL        NAME VARCHAR2(45) NOT NULL
ID_COUNTRY NUMBER NOT NULL         ID_REGION NUMBER NOT NULL
...other fields                   ...other fields

-------------------------         
        REGION                            
-------------------------         
ID   NUMBER NOT NULL              
NAME VARCHAR2(45) NOT NULL        
...other fields    

【问题讨论】:

  • 你能把你的两张桌子贴出来吗?结果有点令人困惑,没有看到你从什么开始。

标签: sql oracle plsql concatenation string-concatenation


【解决方案1】:

在 oracle 上,聚合 LISTAGG 函数可以对由其他列分组的列进行字符串连接。

http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions089.htm

根据我从您的表格中收集到的信息,如果我们对您的第一组结果这样做

SELECT MIN(ID_STREET), STREET, COUNTRY, REGION, 
       LISTAGG(ID_STREET, ',') WITHIN GROUP (ORDER BY STREET) AS DUPLICATED
  FROM MYTABLE
GROUP BY STREET,COUNTRY,REGION

我们会得到你的第二个。我需要查看原始表以显示可以执行您想要执行的操作的查询。

【讨论】:

  • 仅在 Oracle 11g 或更高版本上。
  • WM_CONCAT 可用于早期版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2011-06-08
  • 2022-06-10
  • 2010-11-05
  • 1970-01-01
  • 2017-07-28
相关资源
最近更新 更多