Oracle 中是否有任何方法可以跳过 select 中已经显示的值?

Is there any way in Oracle to skip a value in a select when it has been already shown?

抱歉,这可能是个愚蠢的问题,但老实说,我不知道该如何处理。假设在执行带有 group by 子句的 select 后,我得到以下信息:

col1    col2    col3
---------------------
value1  optionA  1
value1  optionB  5
value2  optionA  3
value2  optionB  4

但我想获得以下信息:

col1    col2    col3
---------------------
value1  optionA  1
        optionB  5
value2  optionA  3
        optionB  4

换句话说,如果之前显示的值相同(在本例中为 value1 和 value2),我不想显示它

这对 Oracle 可行吗?如果答案是肯定的,请您指出正确的方向好吗?

谢谢。

你没有说行的排序标准是什么,所以我假设它是 (col1, col2).

您想要的查询应如下所示:

select
  case when col1 = lag(col1) over(order by col1, col2) 
       then null
       else col1
  end as col1,
  col2, 
  col3
from t

如果您使用的是 SQL*Plus 并且使用的是不支持分析函数的 Oracle 版本,您可以使用它的 break 命令。我想现在不是这样了吧?

原来:

SQL> with temp (col1, col2, col3) as
  2    (select 'value1', 'optionA', 1 from dual union all
  3     select 'value1', 'optionB', 5 from dual union all
  4     select 'value2', 'optionA', 3 from dual union all
  5     select 'value2', 'optionB', 4 from dual
  6    )
  7  select col1, col2, col3
  8  from temp
  9  order by col1, col2;

COL1   COL2          COL3
------ ------- ----------
value1 optionA          1
value1 optionB          5
value2 optionA          3
value2 optionB          4

让我们打破它:

SQL> break on col1
SQL>
SQL> /

COL1   COL2          COL3
------ ------- ----------
value1 optionA          1
       optionB          5
value2 optionA          3
       optionB          4

SQL>