计数器模拟-Oracle SQL

时间:2019-08-19 09:12:09

标签: sql oracle sequence counter

我有一个需要执行此操作的方案:

表格:UDA_VALUES 它具有三个字段:

UDA_ID, UDA_VALUE_ID, UDA_VALUE_DESC

该表的数据如下:

UDA_ID   UDA_VALUE_ID
  1          100
  1          243
  2          264
  3          564
  3          634
  3          774   

我需要显示以下数据:

UDA_ID    COUNTER   UDA_VALUE_ID
  1          1            100
  1          2            243
  2          1            264
  3          1            564
  3          2            634
  3          3            774

我如何写计数器?

2 个答案:

答案 0 :(得分:4)

使用窗口功能row_number()

select UDA_ID,row_number() over(partition by UDA_ID order by UDA_VALUE_ID) counter, UDA_VALUE_ID
from table

答案 1 :(得分:0)

SELECT v.UDA_ID,
       (SELECT COUNT(*)
        FROM UDA_VALUES AS _v
        WHERE _v.UDA_ID = v.UDA_ID) AS COUNTER,
       v.UDA_VALUE_ID
FROM UDA_VALUES AS v

为了获得更好的性能,您可以使用:

SELECT v.UDA_ID,
       counter.COUNTER,
       v.UDA_VALUE_ID 
FROM UDA_VALUES AS v
     INNER JOIN (SELECT _v.UDA_ID,
                        COUNT(*) AS COUNTER
                 FROM UDA_VALUES AS _v
                 GROUP BY _v.UDA_ID) AS counter ON counter.UDA_ID = v.UDA_ID