Сглаживание столбцов в отношении «один ко многим» в Oracle 10g - PullRequest
1 голос
/ 23 октября 2010

Полагаю, это вопрос выяснения, какую команду оракула использовать, но после пары часов поиска в Google я не нашел ничего, что могло бы сделать то, что мне нужно.Итак, вот что мне нужно, чтобы это произошло в двух словах:

  Table 1                   Table 2
|  PrjID   |       |  PrjID   |  UserID  |  
|----------|       |----------|----------|  
| Project1 |       | Project1 |  User1   |  
| Project2 |       | Project1 |  User2   |  
| Project3 |       | Project1 |  User3   |  
| Project4 |       | Project2 |  User2   |  
| Project5 |       | Project3 |  User5   |  

Мне нужно сгенерировать запрос SQL, чтобы с помощью двух приведенных выше таблиц я мог сгенерировать результат, который выглядит следующим образом:

|  PrjID   |      UserIDs      |  
|----------|-------------------|  
| Project1 | User1,User2,User3 |  
| Project2 | User2             |  
| Project3 | User5             |  

Первое, что я подумал - это оператор объединения, но, как я уверен, многие из вас знают, это даст результат, имеющий несколько строк для каждого проекта.Я также наткнулся на несколько учебных пособий по сводным точкам, но на самом деле это просто для того, чтобы перевернуть ваш результат на бок, а не для фактического агрегирования строковых значений строки.Я все еще немного новичок в более продвинутых частях SQL, поэтому вполне возможно, что я просто прибегаю к помощи неправильных вещей, чтобы понять, как это сделать.Я, вероятно, могу взломать решение на Java (это часть веб-приложения), которое будет просто перебирать строки и извлекать каждого пользователя, но мне бы очень хотелось узнать, как заставить SQL выполнять эту часть для меня.

Любая предложенная помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Вот объяснение с примером кода с использованием collect_func ()

http://www.adp -gmbh.ch / блог / 2005 / март / 28.html

0 голосов
/ 23 октября 2010

Прочтите эту страницу о конкатенации строк в Oracle .

Предполагая, что вы можете использовать wm_concat:

  SELECT a.prjid,
         wm_concat(b.userid) AS userids
    FROM TABLE_1 a
    JOIN TABLE_2 b ON b.prjid = a.prjid
GROUP BY a.prjid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...