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

Връзка с агрегирани низове в Oracle 10g

Oracle 11g има тази удобна функция LISTAGG, която е почти това, което искате, но тъй като сте на 10g, това не е достъпно за вас (освен ако не решите да надстроите).

Ако по някаква причина не желаете (или не можете поради каквито и да било причини) да надстроите до 11g, бих ви предложил да разгледате някои алтернативи на LISTAGG, които са достъпни за вас на 10g.

Можете да разгледате някои от предложените алтернативи тук

Бързо коригирана бърза адаптация на една от предложените алтернативи, за да съответства на вашия случай:

WITH Q AS
(
    SELECT 'North' POD, 'Rony' NAME FROM DUAL  UNION ALL
    SELECT 'North',     'James'     FROM DUAL  UNION ALL
    SELECT 'North',     'Aby'       FROM DUAL  UNION ALL
    SELECT 'South',     'Sam'       FROM DUAL  UNION ALL  
    SELECT 'South',     'Willy'     FROM DUAL  UNION ALL
    SELECT 'West',      'Mike'      FROM DUAL
)
SELECT   POD,
         RTRIM(
            XMLAGG (XMLELEMENT(e, name||',') ORDER BY name).EXTRACT('//text()'),
            ','
         ) AS name
    FROM q
GROUP BY POD;

Но не забравяйте, че това не е действителното решение, тъй като ще трябва да го приспособите според вашата таблица (а не фиктивната DUAL таблица) и т.н...

Вашето решение вероятно ще изглежда нещо подобно на:

SELECT   POD,
         RTRIM(
            XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
            ','
         ) AS NAME
    FROM tbl1
GROUP BY POD;

Ако искате да промените разделителя, можете да го промените от запетая в тази част:

(E, NAME||',')

RTRIM е там само за да отреже запетая в края на свързания низ, ако не ви притеснява запетая в края, можете да пропуснете функцията RTRIM, за да запазите четливостта.



  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 PL/SQL - Как да създадете обикновена променлива от масив?

  2. Материализиран изглед със спусък?

  3. Кодиране на набор от символи и фактори за размер на паметта

  4. Прекъсване на PL/SQL програма

  5. Индексът на базата данни е нечувствителен към малки и големи букви?