1. ホーム
  2. sql

[解決済み] Oracle : キーワードの最初の行に 'Count over Partition by' を単独で出力する。

2022-03-07 12:29:31

質問

私は以下のようなテーブルを照会しなければなりません。

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|クリア


キーワード(of status)の最初の出現に対してのみ、ステータスのカウントを取得すること。


または、他の方法を提案してください。

解決方法は?

私ならこんな風にします。

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
)

参照 SQLフィドル

Gordon Linoffが言ったように、ある種の順序付けが必要です。私はorder_nameで並べましたが、もしテーブルの中に他のフィールドがあれば、それを代わりに使うことができます。