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>
抱歉,这可能是个愚蠢的问题,但老实说,我不知道该如何处理。假设在执行带有 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>