2010-11-11 6 views
1

HI, je la requête suivante, mais il est fait pas tout à fait ce que je pense à fairePostgres problème de requête, doivent sélectionner des valeurs uniques

SELECT DISTINCT(c.id) AS "CLIENT CODE",c.name AS "CLIENT NAME", count(cmp.id) as "NUMBER OF CAMPAIGNS ON LIVE AND PENDING" FROM clients AS c ,campaigns AS cmp WHERE cmp.clientid = c.id AND cmp.status NOT IN('S','C','X','?') GROUP BY c.name,c.id ORDER BY c.name; 

Ce que je veux atteindre est le suivant. J'ai une table de clients et une table de campagnes dans postgres. Les clients ont des campagnes, un client peut donc avoir 100 campagnes. Un client peut avoir des campagnes avec le statut L, C, X ou seulement L, C, P. Il n'y a que L, P, C, X, S ,? fot les statuts. Maintenant, je veux que la requête retourne uniquement les clients qui ont des campagnes avec le statut L et P et pas les autres. En d'autres termes, seuls les clients ayant le statut de campagne L et P doivent être retournés. Si le client a X, C et L et P, il ne doit pas être retourné.

espère que cela est possible et sence

+0

Si un client ne dispose que '' L' ou seulement p', devraient-ils être retourné? – Quassnoi

+0

@Quassnoi - Si un client a L et P alors ils devraient être retournés, mais si un client a L, P et C alors ils ne devraient pas être retournés. C, L, P sont des valeurs d'état, l'état est une colonne dans la table des campagnes. – Roland

+0

vous n'avez pas répondu à ma question. Que faire si le client n'a que «L»? – Quassnoi

Répondre

4
SELECT * 
FROM clients 
WHERE id IN 
     (
     SELECT clientid 
     FROM campaigns 
     WHERE status IN ('L', 'P') 
     ) 
     AND id NOT IN 
     (
     SELECT clientid 
     FROM campaigns 
     WHERE status NOT IN ('L', 'P') 
     ) 
Questions connexes