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

Итак, у меня есть два столбца t1.NAME и t2.ITEMS, для каждого neme может быть назначено более одного элемента, поэтому я хочу выбрать его следующим образом:

| NAME | ITEMS |
  JOHN    1
          2
  BEN     4
          7
          3
  DAVE    5

Ps если поможет, они связаны t1.id = t2.names_id

3 ответа

Решение

Результат моего нижеприведенного запроса очень близок к тому, что вы хотите... единственное отличие в том, что нет пустого имени, потому что вы не можете напрямую сделать это в результате одного шага запроса... каждый элемент принадлежит имени каждого идентификатора в t1. НО вы можете сделать некоторые трюки там, если вы хотите получить точный результат, вы можете использовать UPDATE сделать некоторые трюки с результатом.

    SELECT t1.NAME, t2.ITEMS
    FROM t1 INNER JOIN t2 ON t1.id = t2.names_id

Я обычно делаю это в SQL*Plus, и все дело в форматировании вашего вывода.

Вы можете использовать BREAK ON column_name.

Например,

SQL> break on deptno
SQL> SELECT deptno, ename FROM emp order by deptno;

    DEPTNO ENAME
---------- ----------
        10 CLARK
           KING
           MILLER
        20 JONES
           FORD
           ADAMS
           SMITH
           SCOTT
        30 WARD
           TURNER
           ALLEN
           JAMES
           BLAKE
           MARTIN

14 rows selected.

Такого рода операции должны выполняться на уровне представления.

Но если вы настаиваете, вы можете использовать что-то вроде:

SqlFiddleDemo

SELECT DISTINCT NAME,
      LISTAGG(Items,  chr(13)||chr(10)) WITHIN GROUP (ORDER BY 1) OVER (PARTITION BY Name) AS Items
FROM tab

измените вкладку с подзапросом, который производит вывод, который вы получаете сейчас.

Подсказка состоит в том, чтобы объединить для каждого имени соответствующие Предметы и добавить символ новой строки CHR(13) + CHR(10),

Другие вопросы по тегам