2012-05-02 3 views
2

J'ai le tableau ci-dessous et j'essaie de regrouper les lignes en fonction d'un identifiant. Je veux accéder à retourner tous les cas où type contient un S et A pour le même id (a19), mais ne retourne pas les instances où S ou A existent sans l'un l'autre (a22 & a33).Accéder au regroupement sur les lignes par critères

Quelle est la manière la plus simple de le faire?

+---+----+--------------+ 
|id |type| text  | 
+---+----+--------------+ 
a19 S  S1 
a19 A  A1 
a19 A  A1 
a22 Y  A1 
a33 S  S1 
+---+----+--------------+ 
+0

Je ne pense pas que vous vouliez regrouper. Je pense que vous devrez utiliser une auto-jointure, mais je ne sais pas exactement comment le faire. Je l'ai mis à jour pour que l'un des experts SQL puisse vous aider. En outre, la table que vous shoing ici a des enregistrements en double (2ème et 3ème enregistrements). J'espère que ce n'était qu'une faute de frappe, ou peut-être que vous ne montrez pas tous les champs ici. – HK1

Répondre

3

Voici une requête qui renvoie tous les codes qui ont les deux types A et S:

SELECT subQuery.id 
FROM (SELECT group_table.id 
FROM group_table 
WHERE (((group_table.type) IN ("A","S"))) 
GROUP BY group_table.id, group_table.type) AS subQuery 
GROUP BY subQuery.id 
HAVING Count(subQuery.id) = 2 

Vous pouvez le faire une certaine souplesse en remplaçant "... IN ("A"," S ") ..." avec quelque chose comme "SELECT FilterType FROM FilterTable" et en changeant "... Count (subQuery.id) = 2 ..." par exemple "... Count (subQuery.id) = SELECT COUNT (FilterType) FROM TableauTélé ..."

Questions connexes