2009-11-17 4 views
0

Je travaille avec 3 tables, en essayant de tirer une liste qui correspondent à certains critères. J'ai besoin d'une liste d'entreprises de la table companies, qui ont une opportunité active (iactive est 1 dans la table des opportunités) ET qui ont un enregistrement dans la table des notes de type order ou order2.Sélectionnez parmi plusieurs tables correspondant à plusieurs critères

Companies Table 
+------+------------------+ 
| cid |  ccyname  | 
+------+------------------+ 
| 1c | Bobs Fish  | 
| 2c | Sheep Counters | 
| 3c | Old Timers  | 
| 4c | Roasted Nuts  | 
+------+------------------+ 

    Notes Table 
+------+--------+--------+ 
| nid |ntype |cid  | 
+------+--------+--------+ 
| 1n | order |3c  | 
| 2n | quest |1c  | 
| 3n | order2 |2c  | 
| 4n | cancel |2c  | 
+------+--------+--------+ 

Opportunities Table 
+------+--------+--------+ 
| oid |iactive | cid | 
+------+--------+--------+ 
| 1o | 1  | 1c  | 
| 2o | 0  | 3c  | 
| 3o | 1  | 3c  | 
| 4o | 1  | 2c  | 
+------+--------+--------+ 

Avec cet exemple, les résultats devraient être:

 Results 
+----------------+--------+ 
| ccyname  | oid | 
+----------------+--------+ 
| Old Timers  | 3o  | 
| Sheep Counters | 4o  | 
+----------------+--------+ 

Ce qui me donnerait seulement les entreprises qui ont à la fois une opportunité active et d'une commande ou order2 note.

J'ai essayé de construire cela de différentes façons, mais je me retrouve toujours avec un seul résultat ou avec trop de résultats. Pourrais-je obtenir de l'aide?

C'est sur SQL Server 2005.

Merci, John

+0

Est-ce une question de devoirs? – Zannjaminderson

+0

Pouvez-vous énumérer une de vos tentatives? – JeffO

+0

Non, c'est pour notre système CRM au travail, en essayant de créer un rapport. Malheureusement, j'apprends toujours le SQL, donc mes tentatives ont été principalement avec Access et le concepteur de requêtes. –

Répondre

1
SELECT DISTINCT(ccyname), oid 
FROM Companies AS c 
INNER JOIN Notes AS n ON c.cid = n.cid 
INNER JOIN Opportunities AS o ON c.cid = o.cid 
WHERE n.ntype IN ('order','order2') 
AND o.iactive = 1; 

caveat: Non testé.

+0

J'ai été capable de faire fonctionner ceci et de me donner plusieurs résultats, je crois que cela fonctionnera. Après avoir vérifié les résultats, je rapporterai sur tous les problèmes. –

0
SELECT DISTINCT cid, ccyname 
FROM Companies c 
INNER JOIN Notes n ON n.cid = c.cid AND n.ntype = 'order2' OR n.ntype = 'order' 
INNER JOIN Opportunities o ON o.cid = c.cid AND o.iactive = 1 
1
SELECT 
    C.ccyname, O.oid 
FROM 
    Companies C 
    JOIN 
    Opportunities O AND O.cid = c.cid 
WHERE 
    O.iactive = 1 
    AND 
    EXISTS (SELECT * FROM Notes N 
     WHERE N.ntype IN ('order', 'order2') AND N.cid = c.cid) 
+0

+1 Bien que d'autres solutions donnent le même résultat, je pense qu'utiliser Exists correspond le plus à la requête de "avoir un enregistrement dans la table des notes de type order ou order2". De plus, les champs de la table des notes ne sont pas requis. – JeffO

Questions connexes