Oracle, эквивалентная SQL Server, НАПОЛНЯЕТ функцию?

Делает Oracle, имеют ее собственную реализацию SQL Server stuff функция?

Материал позволяет Вам получать одно значение от много выбора строки. Рассмотрите мою ситуацию ниже

 ID   HOUSE_REF   PERSON
 1      A         Dave
 2      A         John
 3      B         Bob

Я хотел бы записать избранный оператор, но я хочу PERSON имена, чтобы быть в одной строке.

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

HOUSE_REF   PERSONS
A           Dave, John
B           Bob

Я не смог найти простое решение до сих пор, это может быть случай записи моей собственной функции для использования, но я не совсем уверен в том, как приблизиться к этому, каким-либо идеям?

Основное бизнес-использование этого, должен будет иметь избранный оператор, который показывает каждый дом, и против того дома, чтобы иметь один столбец, который перечисляет всех, которые живут в том доме. Дом касательно в этом выборе должен быть уникальным, следовательно будучи должен связать людей

Спасибо

6
задан marc_s 21 January 2010 в 09:49
поделиться

3 ответа

Вы можете написать пользовательскую совокупную функцию для этого. Эта строка, которую вы генерируете, ограничен 4K символами.

http://www.sqlsnippets.com/en/topic-111591.html

Есть недокументированная, неподдерживаемая функция wmsys.wm_concat , чтобы сделать то же самое.

http://www.psoug.org/reference/undocumented.html

2
ответ дан 9 December 2019 в 22:34
поделиться

Строка - это своего рода особый случай. Все настоящие примитивные типы (INT, длинные и т. Д.) являются побыточными и реализованы непосредственно в JVM. Строка представляет собой ссылочный тип, и поэтому имел дело с любым другим классом (заглавная буква, пропускной справочник ...), кроме компилятора имеет специальные крючки для того, чтобы иметь дело с ним, как встроенный тип (+ для объединения строки, Например).

Как уже есть ссылочный тип, ему не нужен класс обертки, как целое число, чтобы иметь возможность использовать его как класс (в коллекциях, например)

-121--1706245-

Oracle 11.2 включает в себя новую функцию listagg для этого.

До этого вы можете использовать Функция Stragg Tom Kyte .

7
ответ дан 9 December 2019 в 22:34
поделиться

«Никаких дополнений / без документов без документов» Oracle Solution (до 11.2 как упоминания Тони):

select c1, ltrim(sys_connect_by_path(c2,','),',') persons
 from
  (
   select c1, c2, 
    row_number() over (partition by c1 order by c2 ) rn
     from
      (
       select house_ref c1, person c2 
        from housetable 
      )
   )
  where connect_by_isleaf=1
  connect by prior rn+1 =rn and prior c1 = c1
  start with rn=1
;
1
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: