| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
|  |  | |||
Home -> Community -> Usenet -> c.d.o.misc -> Re: SELECTing multiple rows to a single output line
scott_at_ORA92> CREATE TABLE family
2 (id NUMBER, 3 father VARCHAR2(7), 4 mother VARCHAR2(7), 5 kids NUMBER, 6 CONSTRAINT family_pk 7 PRIMARY KEY (id))
Table created.
scott_at_ORA92> INSERT ALL
  2  INTO family VALUES (1, 'ALAN', 'ANGIE', 2)
  3  INTO family VALUES (2, 'BILL', 'BETTY', 3)
  4  SELECT * FROM DUAL
  5  /
2 rows created.
scott_at_ORA92> CREATE TABLE child
2 (id NUMBER, 3 child VARCHAR2(7), 4 CONSTRAINT child_fk 5 FOREIGN KEY (id) 6 REFERENCES family (id))
Table created.
scott_at_ORA92> INSERT ALL
2 INTO child VALUES (1, 'ALEX') 3 INTO child VALUES (1, 'ANNETTE') 4 INTO child VALUES (2, 'BARBARA') 5 INTO child VALUES (2, 'BEVERLY') 6 INTO child VALUES (2, 'BOB')
5 rows created.
scott_at_ORA92> COMMIT
  2  /
Commit complete.
scott_at_ORA92> SELECT * FROM family
  2  /
        ID FATHER  MOTHER        KIDS
---------- ------- ------- ----------
         1 ALAN    ANGIE            2
         2 BILL    BETTY            3
scott_at_ORA92> SELECT * FROM child
  2  /
        ID CHILD
---------- -------
         1 ALEX
         1 ANNETTE
         2 BARBARA
         2 BEVERLY
         2 BOB
scott_at_ORA92> COLUMN child_names FORMAT A25 scott_at_ORA92> SELECT id, father, mother, kids,
2 MAX (SUBSTR (SYS_CONNECT_BY_PATH (child, ','), 2)) 3 AS child_names 4 FROM (SELECT f.id, f.father, f.mother, f.kids, c.child, 5 ROW_NUMBER () OVER 6 (PARTITION BY f.id 7 ORDER BY c.child) AS curr, 8 ROW_NUMBER () OVER 9 (PARTITION BY f.id 10 ORDER BY c.child) - 1 AS prev 11 FROM family f, child c 12 WHERE f.id = c.id)
        ID FATHER  MOTHER        KIDS CHILD_NAMES
---------- ------- ------- ---------- -------------------------
         1 ALAN    ANGIE            2 ALEX,ANNETTE
         2 BILL    BETTY            3 BARBARA,BEVERLY,BOB
scott_at_ORA92> Received on Sun Aug 14 2005 - 12:01:48 CDT
|  |  |