2017-01-26 13 views
0

Ich habe zwei Tabellen mit den Namen tbl_brands und tbl_counter_stock. In tbl_brands gibt es ein Schlüssel-Wert-Paar von Marken-ID und Markenname. In tbl_counter_stock Spalten sind wie brnd_id, 2000ml, 1000ml, stock, stock_date. Jede Zeile stellt die Marke von Likör mit verschiedenen Lagern wie O-Opening, R-Empfangene, S-Sales, C-Closing Ich mag den Rekord holen für Endbestände aus dieser Tabelle der einzelnen Marken und wenn die Eintrag für C (Closing Stock) ist in dieser Tabelle nicht vorhanden, dann möchte ich O (Opening Stock) dieser Marke abholen. Ich erhalte beide Werte für den Anfangs- und Endbestand, wenn der Schlussbestand für diese Marke bereits vorhanden ist. Und das ist kein gewünschtes Ergebnis für mich. Ich möchte O (Anfangsbestand) nur erhalten, wenn C (Schlussbestand) nicht vorhanden ist. Vielen Dank im Voraus.Wie erhält man den Wert einer anderen Zeile, wenn die Zeile in der Tabelle nicht existiert?

SELECT 
     A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0) bottles, 
     B.stock,B.stock_date 
     FROM tbl_brands A 
     left OUTER JOIN 
     tbl_counter_stock AS B 
     on A.BRND_ID=B.BRND_ID 
     AND B.STOCK IN('O','C') 
     AND B.STOCK_DATE='2017-01-18' 

Antwort

1

ich glaube, die Lösung einfacher zu verstehen ist, wenn Sie eine Tabelle erstellen:
Erstellen Sie eine Tabelle (TABLE_C) mit Closing_Stock nur (WHERE-Klausel reduziert = ‚C‘ B.STOCK) dann links kommen aus Ihr tbl_brands zu Ihrer Tabelle_C, um alle brand_ids zu finden, die einen Closing-Bestandsdatensatz vermissen und Ihrem tbl_counter_stock (WHERE B.STOCK = 'O') beizutreten, um die fehlenden IDs einzufügen.

CREATE TABLE brand_stock_overview (Key brnd_id(brnd_id)) 
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0) 
bottles, B.stock,B.stock_date 
FROM tbl_brands A 
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID) 
WHERE B.STOCK ='C' 
AND B.STOCK_DATE='2017-01-18'; 

INSERT INTO brand_stock_overview 
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0)  
bottles, B.stock, B.stock_date 
FROM tbl_brands A 
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID) 
LEFT JOIN brand_stock_overview C ON(A.BRND_ID=C.BRND_ID) 
where B.STOCK='O' AND C.BRND_ID IS NULL 
AND B.STOCK_DATE='2017-01-18'; 
+0

Das ist genial Lösung und es hat für mich funktioniert. Ich habe viel gekämpft und du hast mich gerettet :) Vielen Dank @iLikeMySql –

+0

Ich bin froh, dass ich dir helfen konnte. Ich habe gerade gemerkt, dass ich STOCK_DATE in der zweiten Where-Klausel vergessen und die Vollständigkeit korrigiert habe. – iLikeMySql

+0

Vielen Dank. Ich habe es selbst gemacht :) –

Verwandte Themen