2016-07-14 22 views
-2

Meine Tabelle enthält mehrere lots (LOT_ID) und jedes Los enthält mehrere products(PRODUCT_ID) und es gibt mehrere orders (ORDER_ID) unter jedem Produkt. Ich mag die order ID’s wissen, welche für mehr products für ein gegebenes LOTDuplikate in einer Tabelle finden

S.NO LOT_ID Product_ID Order_ID 
1  101 P108  90001 
2  101 P109  90001 
3  101 P110  80900 
4  102 S189  10098 
5  102 S234  10087 
6  102 S465  10098 
7  102 S342  10050 
8  103 L109  20090 
9  103 L110  20098 
10  103 L111  20020 

Gewünschtes Ergebnis wiederholt wird

S.NO  LOT_ID Product_ID Order_ID 
1   101  P108  90001 
2   101  P109  90001 
3   102  S189  10098 
4   102  S465  10098 
+0

Ich denke, du solltest die Lösung bereits in 'stackoverflow' oder' googling' finden, du solltest viel suchen, bevor du eine Frage stellst, sonst kannst du eine doppelte Frage posten, die ** dir (10) oder mehr Punkte kostet **. – Avishek

+0

Eine einfache Auswahl wie diese ist alles was Sie brauchen: 'SELECT [S.NO], LOT_ID, PRODUCT_ID, ORDER_ID VON myTable T WHERE ORDER_ID IN (SELECT ORDER_ID VON myTable WHERE LOT_ID = T.LOT_ID GROUP NACH ORDER_ID HAVING COUNT (*)> 1); ' – ZLK

+0

Oben Code zeigt die Ergebnisse für mehrere Aufträge, aber ich würde gerne die Aufträge, die für mehrere Produkte wiederholt werden, sehen Sie sich das Beispiel, das ich in meiner Frage erwähnt. Auftrags-IDs (90001 und 10098) werden für mehrere Produkte unter demselben LOT zweimal wiederholt. Der Ergebnissatz sollte also nur die LOT_ID, PRODUCT_ID für diese Aufträge anzeigen – Vamshi

Antwort

0

Ich glaube, Sie Gruppe von auf order_id erste gelten sollten, und Sie werden die Ergebnismenge erhalten . Bitte überprüfen Sie die Antwort, aber ich habe das nicht ausgeführt.

select LOT_ID, Product_ID, Order_ID 
from <tableName> 
where Order_ID IN (SELECT Order_ID FROM <tableName> where LOT_ID in (101,102) 
GROUP BY Order_ID HAVING COUNT(*) > 1); 
+0

Wenn es möglich wäre, dass eine Auftrags-ID für verschiedene Los-IDs existiert, würde dies zu unerwünschten Ergebnissen führen. Außerdem müssen vermutlich mehr als nur Chargen 101/102 überprüft werden. Besser wäre es, die Tabelle in der from-Anweisung zu aliasieren und in der in-Anweisung darauf zu verweisen (siehe meinen Kommentar). – ZLK

0

Zählung wiederholt und dann die Menge wählen müssen Sie

select t.*, count(*) over (partition by t.LOT_ID, t.Product_ID, t.Order_ID) as c 
     , count(*) over (partition by t.LOT_ID, t.Order_ID) as c2 
    from t 

Wenn Anzahl der eindeutigen Strings nicht gleich Anzahl der eindeutigen Lots und Bestellungen ist - der Fall ist.

Verwandte Themen