Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да свържете множество редове, подредени по последователност в Oracle10g

Никога не използвайте WM_CONCAT . Прочетете Защо да не използвате функцията WM_CONCAT в Oracle?

Вижте тази тема https://stackoverflow.com/a/28758117/3989608 .

Той е недокументиран и всяко приложение, което разчита на WM_CONCAT няма да работи, след като бъде надстроен до 12c защото е премахнат от най-новата версия 12c.

Има много начини за извършване на обединяване на низове , в зависимост от версията на базата данни . Вижте няколко примера по-долу:

11gR2

Използвайте LIASTAGG :

SQL> SELECT grp,
  2    listagg(command, ',') WITHIN GROUP(
  3  ORDER BY seq) command
  4  FROM t
  5  GROUP BY grp;

GRP COMMAND
--- --------------------------------------------------------------------------------------------
ONE <?xml version=1.0 encoding=UTF-8?>,<message1>MESSAGE</message1>,<message2>MESSAGE</message2>
TWO <?xml version=1.0 encoding=UTF-8?>,<message2>MESSAGE</message2>,<message9>MESSAGE</message9>

SQL>

9i и нагоре

Използвайте ROW_NUMBER() и SYS_CONNECT_BY_PATH :

SQL> SELECT grp,
  2         LTRIM(MAX(SYS_CONNECT_BY_PATH(command,','))
  3         KEEP (DENSE_RANK LAST ORDER BY seq),',') command
  4  FROM   (SELECT grp,
  5                 command,
  6                 seq,
  7                 ROW_NUMBER() OVER (PARTITION BY grp ORDER BY seq) AS curr,
  8                 ROW_NUMBER() OVER (PARTITION BY grp ORDER BY seq) -1 AS prev
  9          FROM   t)
 10  GROUP BY grp
 11  CONNECT BY prev = PRIOR curr AND grp = PRIOR grp
 12  START WITH curr = 1;

GRP COMMAND
--- --------------------------------------------------------------------------------------------
ONE <?xml version=1.0 encoding=UTF-8?>,<message1>MESSAGE</message1>,<message2>MESSAGE</message2>
TWO <?xml version=1.0 encoding=UTF-8?>,<message2>MESSAGE</message2>,<message9>MESSAGE</message9>

SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да върна динамичен набор от резултати във функцията на Oracle

  2. Изпълнете pl/sql функция с OracleCommand

  3. Oracle SQL Developer копира база данни стъпка по стъпка

  4. Oracle SQL CASE WHEN ORA-00932:несъвместими типове данни:очакваният CHAR получи НОМЕР 00932. 00000 - несъвместими типове данни:очаква се %s получи %s

  5. Как да експортирате резултатите от заявката на Oracle в JSON файл, когато използвате SQLcl