1

所以,我有两列 t1.NAME 和 t2.ITEMS,对于每个 neme,可以分配多个项目,所以我想选择它:

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

Ps 如果有帮助,它们通过 t1.id = t2.names_id 连接

4

3 回答 3

0

我通常在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.
于 2015-10-01T08:31:27.847 回答
0

这种操作应该在表示层完成。

在此处输入图像描述 在此处输入图像描述

但是如果你坚持你可以使用类似的东西:

SqlFiddleDemo

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)

于 2015-10-01T08:20:27.013 回答
0

我的以下查询的结果非常接近您想要的结果。唯一的区别是,没有空白名称,因为您不能直接在一步查询中执行该结果。每个项目都属于 t1 中每个 id 的名称。但是如果你想得到确切的结果,你可以在那里做一些技巧,你可以用结果UPDATE做一些技巧。

    SELECT t1.NAME, t2.ITEMS
    FROM t1 INNER JOIN t2 ON t1.id = t2.names_id
于 2015-10-01T08:19:06.880 回答