Oracle : 'Count over Partition by' 仅在关键字的第一行输出
Oracle : 'Count over Partition by' output on first row of the keyword alone
我必须查询如下所示的 table。
select count(*) over (PARTITION BY offer_status) as count, name, status
from tablename
输出为:
3 |名称 1 |进入
3 |名称 1 |进入
3 |姓名 2 |清除
1 |姓名 3 |完成
3 |姓名 3 |清除
3 |名称 1 |进入
3 |姓名 2 |清除
我想得到它:
3 |名称 1 |进入
|姓名 3 |进入
3 |姓名 2 |清除
1 |姓名 3 |完成
|姓名 3 |清除
|姓名 3 |进入
|姓名 3 |清除
仅在关键字(状态)的第一次出现时获取状态计数,因为不需要一次又一次地获取计数。
或者你可以建议我任何其他方式来完成它。
我会做类似的事情:
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
)
正如 Gordon Linoff 所说,您需要某种排序。我按 order_name 订购了它们,但如果您在 table 中有其他字段,则可以改用它。
我必须查询如下所示的 table。
select count(*) over (PARTITION BY offer_status) as count, name, status
from tablename
输出为:
3 |名称 1 |进入
3 |名称 1 |进入
3 |姓名 2 |清除
1 |姓名 3 |完成
3 |姓名 3 |清除
3 |名称 1 |进入
3 |姓名 2 |清除
我想得到它:
3 |名称 1 |进入
|姓名 3 |进入
3 |姓名 2 |清除
1 |姓名 3 |完成
|姓名 3 |清除
|姓名 3 |进入
|姓名 3 |清除
仅在关键字(状态)的第一次出现时获取状态计数,因为不需要一次又一次地获取计数。
或者你可以建议我任何其他方式来完成它。
我会做类似的事情:
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
)
正如 Gordon Linoff 所说,您需要某种排序。我按 order_name 订购了它们,但如果您在 table 中有其他字段,则可以改用它。