Настройка Oracle :
CREATE TABLE cash_memo ( token_id, field_value ) AS
SELECT 1, 'Cash' FROM DUAL UNION ALL
SELECT 2, 'Draft' FROM DUAL UNION ALL
SELECT 2, 'Cheque' FROM DUAL UNION ALL
SELECT 3, 'Cash' FROM DUAL UNION ALL
SELECT 3, 'Draft' FROM DUAL UNION ALL
SELECT 3, 'Cheque' FROM DUAL UNION ALL
SELECT 4, 'Draft' FROM DUAL UNION ALL
SELECT 4, 'Cheque' FROM DUAL UNION ALL
SELECT 5, 'Cash' FROM DUAL UNION ALL
SELECT 5, 'Cheque' FROM DUAL;
Запрос 1 : если вы хотите, чтобы все столбцы для строк, для которых нет значения 'Draft'
, token_id
, то вы можете использовать аналитическую функцию:
SELECT token_id,
field_value
FROM (
SELECT token_id,
field_value,
COUNT( CASE field_value WHEN 'Draft' THEN 1 END ) OVER ( PARTITION BY token_id )
AS numDraft
FROM cash_memo c
)
WHERE numDraft = 0;
Вывод :
TOKEN_ID | FIELD_VALUE
-------: | :----------
1 | Cash
5 | Cash
5 | Cheque
Запрос 2 : Если вы просто хотитесписок token_id
, которые не имеют 'Draft'
значений:
SELECT token_id
FROM cash_memo
GROUP BY token_id
HAVING ( COUNT( CASE field_value WHEN 'Draft' THEN 1 END ) = 0 );
Выход :
| TOKEN_ID |
| -------: |
| 1 |
| 5 |
db <> Fiddle здесь