Oracle:仅在关键字的第一行输出'Count over Partition by'输出

smi*_*ace 3 sql distinct oracle11g window-functions

我必须查询一个表格,如下所示.

select count(*) over (PARTITION BY offer_status) as count, name, status
from tablename
Run Code Online (Sandbox Code Playgroud)

输出将为:
3 | name1 | 输入
3 | name1 | 输入
3 | name2 | 清除
1 | name3 | 完成
3 | name3 | 清除
3 | name1 | 输入
3 | name2 | 清除


我想得到它:
3 | name1 | 进入
    | name3 | 输入
3 | name2 | 清除
1 | name3 | 完成
    | name3 | 清除
    | name3 | 进入
    | name3 | 清除


仅为关键字(状态)的第一次出现获取状态计数,因为不必一次又一次地获取计数.


或者你可以建议我任何其他方式来完成它.

小智 10

我会做的事情如下:

SELECT CASE WHEN rn=1 THEN cnt END cnt, order_name, status
FROM
(
SELECT count(*) OVER (PARTITION BY status) cnt,
  ROW_NUMBER() OVER (PARTITION BY status ORDER BY order_name) rn,
  order_name,status
FROM input_table
)
Run Code Online (Sandbox Code Playgroud)

请参阅SQL小提琴

正如戈登·林诺夫所说,你需要某种秩序.我通过order_name对它们进行了排序,但是如果表中有其他字段,则可以使用它.