有条件的ROWNUM

时间:2017-06-29 06:39:06

标签: sql oracle oracle11g

我想知道是否可以根据条件

实现选择语句或视图以获得运行编号

Col_1 Col_2 Col_3 Col_4 Col_5 20010887A DISP CT1 A030 K2772 1 20010887A DISP CT1 A040 K1444 2 20010887A DISP CT1 A050 K2422 3 20010887A DISP CT1 A060 K3430 4 20010887A DISP CT2 D115 K1473 1 20010887A DISP CT2 D120 K0053A 2 20010887A DISP CT2 D130 K1444 3 20010887A MIX CT1 F190 K1420 1 20010887A MIX CT2 F220 K1433 1 20010887A MIX CT3 G260 K2742A 1 20010887A MIX CT4 I310 K0916 1 20010887A MIX CT5 J330 K1258 1

最后一列是我想要的运行编号,并使用Col_1,Col_2,Col_3,Col_5进行分组。 Col_4只是一个排序序列。

  

SELECT COL_1,COL_2,COL_3,COL_4,COL_5,ROW_NUMBER()OVER(   按COL_1,COL_2,COL_3分类按COL_4排序作为Col5_Count FROM   myTable的

使用上面的查询,是否可以以相同的方式计算Col_3 ROW_NUMBER但是以不同的方式?例如,所有CT1应该为1,CT2应该为2。

由于

1 个答案:

答案 0 :(得分:1)

  

是否可以让Col_3 ROW_NUMBER以相同的方式计算,但是以不同的方式?例如,所有CT1应为1,CT2应为2。

您可以使用DENSE_RANK()分析函数:

SELECT t.*,
       ROW_NUMBER() OVER ( PARTITION BY COL_1, COL_2, COL_3 ORDER BY COL_4 ) AS Col5_Count,
       DENSE_RANK() OVER ( ORDER BY COL_3 ) AS Col3_Rank
FROM   myTable t