Oracle SQL 隐藏重复值

问题描述 投票:0回答:6

我有一个查询,结果如下:

A | 1
A | 2
B | 1
B | 2
B | 3

我怎样才能得到这样的结果:

A | 1
  | 2  
B | 1   
  | 2   
  | 3
sql oracle
6个回答
4
投票

这是一种方法:

SELECT CASE WHEN rn = 1 THEN c1 ELSE NULL END || ' | ' || c2
  FROM (SELECT c1, c2, ROW_NUMBER() OVER (PARTITION BY c1 ORDER BY c2) rn
          FROM your_table);

3
投票

如果您使用sqlplus,可以使用

BREAK ON

SQL> desc tab1;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                VARCHAR2(1)
 COL2                                               NUMBER

SQL> select * from tab1;

C       COL2
- ----------
A          1
A          2
B          1
B          2
B          3

SQL> break on col;
SQL> select * from tab1;

C       COL2
- ----------
A          1
           2
B          1
           2
           3

SQL>

更多详情这里


2
投票

我模糊地记得有一种方法可以在 SQL PLus 中获取这种格式。 另一种可能的方式如下:

SELECT a.COLUMN_1,
             CASE 
                WHEN a.rnk = 1 THEN a.COLUMN_2 
                ELSE NULL
            END AS COLUMN_2 
  FROM (
                SELECT a.*,
                    RANK() OVER(PARTITION BY COLUMN_1 ORDER BY COLUMN2) rnk
                    FROM <YOUR_TABLE> a
                ) a

1
投票

此表示要求最好在您用来显示结果的应用程序中满足,而不是在原始 SQL 中。您可以使用光标来满足您的要求,但这不是一个非常优雅的解决方案。


1
投票

这更多的是一个格式问题,最好通过您用来显示输出的任何内容来解决。查询结果没有任何问题,作为查询结果


1
投票

在 oracle 中,查看

LEAD
LAG
函数。

可以查看上一行,如果与当前行相同,则将值更改为NULL。

© www.soinside.com 2019 - 2024. All rights reserved.