Oracle SQL隐藏重复值

时间:2011-06-10 19:57:36

标签: sql oracle connect

我对这些结果有疑问:

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

如何让结果如下:

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

6 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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>

更多详情here

答案 2 :(得分: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

答案 3 :(得分:1)

此演示文稿要求最适合用于显示结果的应用程序,而不是原始SQL。您可以使用光标满足您的要求,但这不是一个非常优雅的解决方案。

答案 4 :(得分:1)

这更像是一个格式化问题,最好用你用来显示输出的任何东西来解决。查询结果没有错,作为查询结果

答案 5 :(得分:1)

在oracle中

,查看LEADLAG函数。

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