2016-07-27 28 views
1

Ich möchte alle Bestellungen, die ein bestimmtes Element enthalten und drei Bestellzeilen haben. Also muss ich eine Zählung mit einem Wo kombinieren, aber ich kämpfe damit. Hier ist, was ich dachte, aber es zählt nun die Linien, die diesen Titel auf sie haben, das ist immer 1.Wählen Sie Bestellungen mit bestimmten Artikel und bestimmten Zeilenanzahl

select * from ord 
where ordnum in (select ol.ordnum 
       from ord o 
       join ord_line ol 
        on o.ordnum = ol.ordnum 
       where ol.prtnum in ('item_X')) 
group by ordnum 
having count (ordlin) = 3 

Muss ich 2 wählt machen und die Ergebnisse kombinieren? Wie kann ich das machen? Danke im Voraus.

+0

Markieren Sie die verwendeten DBMS. (Die Antwort kann produktspezifisch sein.) – jarlh

+0

Ihre Formulierung "Ich möchte alle Bestellungen auswählen" ('ord' nehme ich an) contratics, die Sie codieren' wählen * aus ord_line'. Was genau wird benötigt? – Serg

+0

Es ist viel einfacher zu beantworten, wenn Tabellen, Beispieldaten, erwartete Ergebnisse und der Bereich der unterstützten DBMS angegeben sind. –

Antwort

1

Die HAVING Aufträge mit 3 Stück bekommt. Das WHERE stellt sicher, dass eines der Items das ist, das Sie aufnehmen müssen.

HTH.

Select O.OrdrNum, COUNT(OL.OrdNum) 
FROM Ord O 
INNER JOIN Ord_Line OL ON OL.ordnum = O.ordnum 
WHERE O.OrdNum IN (SELECT OrdNum FROM Ord_Line WHERE prtnum = 'item_X') 
GROUP BY O.OrdrNum 
HAVING COUNT(OL.OrdNum) = 3 
+0

Es genagelt! Danke @AntDC – RobNemoo

1

Versuchen Sie, diese

SELECT 
    O.ordnum, 
    COUNT(1) 
FROM 
    ord O INNER JOIN 
    (
     SELECT tmp.ordnum FROM ord_line tmp 
     WHERE 
      tmp.prtnum in ('item_X')) 
     GROUP BY ordnum HAVING COUNT(1) = 3 

    ) A ON O.ordnum = A.ordnum 
GROUP BY O.ordnum 
+0

Fehlendes Schlüsselwort sagt es. Ich sehe in meinem OP ich Select * aus Ord_line, aber das bedeutete, * aus Ord zu wählen. Ich werde das OP ändern. – RobNemoo

+0

@RobNemoo Die Antwort wurde aktualisiert. – NEER

+0

? Scheint, dass diese Lösung GENAU das gleiche Problem wie die ursprüngliche Abfrage haben wird - es wird aus demselben Grund fehlschlagen. – mathguy

Verwandte Themen