【问题标题】:Get rid from one column duplicate values in two column select摆脱两列选择中的一列重复值
【发布时间】:2015-12-29 05:00:39
【问题描述】:

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

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

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

【问题讨论】:

  • 这两张表有没有共同的字段?
  • SQL*Plus 中使用 BREAK ON column_name

标签: sql oracle output-formatting


【解决方案1】:

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

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

【讨论】:

  • 最后感谢我在上面使用了 select ,然后在 java 中,如果前一行的名称 id 与当前行名称 id 不同,则没有将任何结果保存在 resultSet 的数组中 :)
  • @JohnRazerby 欢迎您,听起来不错 :) 因为当我说“技巧”时,您似乎完全理解了我的意思,您自己掌握了 :) 快乐编码 :)跨度>
【解决方案2】:

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

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

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)

【讨论】:

    【解决方案3】:

    我通常在 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2020-07-30
      • 2016-02-23
      • 2012-12-11
      相关资源
      最近更新 更多