0
votes

Requête SQL qui examine plusieurs lignes pour une valeur de colonne

J'essaie de créer une requête qui sélectionne des lignes en fonction d'une valeur de répétition dans une colonne

Select * From Table Where Type != 'ACD'

Je souhaite uniquement sélectionner les lignes qui ont une Record_Key de AED qui n'ont pas de ACD associé à cette Record_Key.

Donc, dans mon exemple fourni, voulez sélectionner Ligne 3 et Ligne 4 .

Je ne peux pas dire:

Row 1:             Row 2:            Row 3:           Row 4:
Record_Key = 1     Record_Key = 1    Record_Key = 2   Record_Key = 3
Type = 'AED'       Type = 'ACD'      Type = 'AED'     Type = 'AED'

parce que cela renverrait Ligne 1 , Ligne 3 et Ligne 4 quand je veux seulement Ligne 3 et Ligne 4 . Je ne peux pas comprendre la structuration de cette requête, ou est-ce que SQL et ma table fournie ne permettent pas ce type de sélection?


1 commentaires

WHERE Type = 'AED' AND NOT EXISTS (...) Cette question a été posée et répondue plusieurs fois, mais c'est un scénario difficile à rechercher.


3 Réponses :


0
votes

Vous pouvez utiliser n'existe pas :

select t.*
from table t
where t.type = 'AED' and 
      not exists (select 1 from table t1 where t1.record_key = t.record_key and t1.type = 'ACD');


0 commentaires

0
votes

l'utilisation n'existe pas

Record_Key  Type
2           AED
3          AED

sortie

    select t1.* from tab t1
    where not exists ( select 1 from tab t2 where t1.Record_Key=t2.Record_Key
                                       and type='ACD')

démo


3 commentaires

Il n'y a qu'une seule table


@Josh oui je n'ai utilisé qu'une seule table


@Josh dbfiddle.uk/… vérifiez ce lien pour votre sortie



0
votes

Vous pouvez grouper par clé_enregistrement et ne conserver que les clé_enregistrement dont le seul type existant est 'AED' :

select record_key, max(type) type 
from tab
where type in ('AED', 'ACD') 
group by record_key
having min(type) = 'AED' and max(type) = 'AED'


0 commentaires