この質問の言い方が正しいかどうかはわかりませんが、これで終わりです。
これは、java、oracle、hibernate を使用した Web アプリケーションです。
1 (アイテム) 対多 (タスク) の関係にある 2 つのテーブルがあります。
アイテム
- item_id 名
- アクティブなステータス
- 等
タスク
- task_id
- item_id
- アクティブなステータス
- 進捗状況
- 等
アイテムのステータスは、そのすべてのタスクのステータスで構成されます。これがロジックです...
- アイテム ステータスがキャンセルまたは保留中の場合...アイテム アクティブ ステータスを返す
- タスクがない場合は Completed を返します
- すべてのタスクがアクティブで置き換えられていない場合、
- ...すべてのタスクが未開始の場合は、未開始を返します
- ...すべてのタスクが完了した場合は Completed を返します
- ...すべてのタスクが保留中の場合は保留に戻す
- それ以外の場合は、Started を返します
SQL を使用してこれを行い、休止状態のマッピング ファイルのフィールドにマップしたいと考えています。
ここ数日いろいろ試しましたが、うまくいきません。レコードをグループ化してみましたが、1 つのレコードが見つかった場合は、そのステータスを返します。デコード、ケースなどを使用しました。
ここに私が試したことのいくつかの例があります。2 番目の例では、「単一のグループ グループ関数ではありません」というエラーが表示されます。
何かご意見は?
select decode(i.active_status_id, 'OH', i.active_status_id, 'Ca', i.active_status_id,t.progress_status_id)
from tasks t
LEFT OUTER JOIN Items i
ON i.item_id = t.item_id
where t.item_id = 10927815 and t.active_status_id = 'Ac' and t.active_status_id != 'Su'
group by i.active_status_id, t.progress_status_id;
select case
when (count(*) = 1) then progress_status_id
else 'St'
end
from
(select progress_status_id
from tasks t
where t.item_id = 10927815 and (t.active_status_id = 'Ac' and t.active_status_id != 'Su') group by t.progress_status_id)