2017-09-14 5 views
-1

Ich habe zwei Tabellen, Sales und Returns. Sie haben CustomerID, Productcode, Name Salesdate, SalesWeek, SalesAmount und ReturnsDate, ReturnsWeek, ReturnsAmount. Was ich wirklich tun möchte, ist nur diese Tabellen verbinden und stapeln sie auf der jeweils anderen, damit der Client sowohl für den Vertrieb und gibt Daten in einem einzigen Bericht hat.Stapel Daten aus zwei Tabellen mit unterschiedlichen Terminen

Verkaufs- und Rückgabetermine sind unterschiedlich, aber die Produktcode, Kundennummer und Namen können für einen Datensatz in Ausgabetabelle gleich sein. Zum Beispiel kaufte Kunde A ein Produkt im letzten Monat und gab es im nächsten Monat zurück, so dass sein Datensatz in der Rückgabetabelle erscheinen kann.

Um dies zu erreichen, habe ich versucht, Vereinigung mit durch alle Spalten zwischen den beiden Tabellen Auswahl, aber ich bin eine Mischung aus Aufzeichnungen für den Vertrieb und kehrt ohne Konsistenz zu bekommen. Alles, was ich tun möchte, ist Null für Kunden, die mit Retouren nichts zu tun haben und umgekehrt. Ich dachte, Left Join in diesem Fall sollte funktionieren, aber es funktioniert nicht. Daher sehe ich in allen Spalten gemischte Daten für Umsatz- und Retourenbeträge. Angefügt ist das Bild, das zwei Tabellen hat, die Ausgabe, die ich sehe und die Ausgabe, die ich sehen möchte. Außerdem führe ich Weekly Aggregations für Sales und Returns aus. Was ist der beste und einfachste Weg, dies zu erreichen? Es tut mir leid ich kann meine Frage nicht richtig strukturiert, aber das Bild könnte #NewToSQL

enter image description here

+0

Vermutlich kann ein Kunde ein bestimmtes Produkt mehr als einmal kaufen. –

Antwort

1

Vermutlich kann ein Kunde ein bestimmtes Produkt mehr als einmal kaufen. Wenn ja, ist ein full join die richtige Lösung, aber man braucht ein bisschen mehr Logik Nicht-Duplizierung in den Ergebnissen zu gewährleisten:

select . . . 
from (select s.*, 
      row_number() over (partition by product_code, customer_id order by (select NULL)) as seqnum 
     from sales s 
    ) s full join 
    (select r.*, 
      row_number() over (partition by product_code, customer_id order by (select NULL)) as seqnum 
     from returns r 
    ) r 
    on s.product_code = r.product_code and s.customer_id = r.customer_id; 

Ich verlasse den Namen aus, weil ich es annehmen, durch die Kunden-ID definiert ist, .

+0

Während ich die von Ihnen zur Verfügung gestellte Logik verstehe, möchte ich auf die Tatsache hinweisen, dass der Produktcode aus beiden Tabellen unterschiedlich ist. Ich möchte beispielsweise alle Verkaufsproduktcodes sehen und diese möglicherweise in Retouren vorhanden sein, möglicherweise nicht. Wählen Sie also bei Auswahl, wie alle Produktcodes aus beiden Tabellen in einer Spalte bei der Ausgabe ausgewählt werden? – Sanj

+0

Wie kann ich die obige Logik verwenden, aber die Spalten (Produktcode aus Verkauf und Rückgabe) aus zwei Tabellen für die Ausgabe in den Bericht verwenden? – Sanj

0

Sie einen FULL JOIN Verkaufstisch auf diesen Spalten mit Renditen Tabelle tun müssen, helfen, die Sie erwähnt.

Etwas wie:

SELECT * 
FROM sales s 
FULL JOIN returns r 
ON s.product_code = r.product_code 
AND s.customerid = r.customer_id 
Verwandte Themen