所以,我有两列 t1.NAME 和 t2.ITEMS,对于每个 neme,可以分配多个项目,所以我想选择它:
| NAME | ITEMS |
JOHN 1
2
BEN 4
7
3
DAVE 5
Ps 如果有帮助,它们通过 t1.id = t2.names_id 连接
所以,我有两列 t1.NAME 和 t2.ITEMS,对于每个 neme,可以分配多个项目,所以我想选择它:
| NAME | ITEMS |
JOHN 1
2
BEN 4
7
3
DAVE 5
Ps 如果有帮助,它们通过 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
使用子查询更改选项卡,生成您现在得到的输出。
线索是为每个名称连接对应的 Items 并添加换行符CHR(13) + CHR(10)
。
我的以下查询的结果非常接近您想要的结果。唯一的区别是,没有空白名称,因为您不能直接在一步查询中执行该结果。每个项目都属于 t1 中每个 id 的名称。但是如果你想得到确切的结果,你可以在那里做一些技巧,你可以用结果UPDATE
做一些技巧。
SELECT t1.NAME, t2.ITEMS
FROM t1 INNER JOIN t2 ON t1.id = t2.names_id