Избавиться от повторяющихся значений в одном столбце в двух столбцах выбора
Итак, у меня есть два столбца 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.
Такого рода операции должны выполняться на уровне представления.
Но если вы настаиваете, вы можете использовать что-то вроде:
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)
,