我有一个需要执行此操作的方案:
表格: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
我如何写计数器?
答案 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