2017-08-02 2 views
0

Ich brauche Hilfe, um eine ORACLE SQL-Abfrage zu erstellen, die mir Verkäufe nach Artikelname für jeden Monat geben kann. Hier sind die Spalten, die in Abfrage benötigt werden - Datum (Monat), Artikelname, Anzahl verkauften Produkte, durchschnittlicher Stückpreis, Nettoumsatz, KrediteinheitenSQL (Oracle) Abfrage für Verkäufe nach Artikel

  • Menge

    einen Artikel verkauft wird das Netz Menge, die nach Gutschriften für einen bestimmten Artikel in diesem Monat verkauft wird; dh = SUMME (Rechnungspositionen Menge verkauft.) - SUM (Gutschrift Artikel Kredit-Menge.)

  • Nettoumsatz

    ein Artikel in einem bestimmten Monat = SUMME (Rechnungs Items.Total Amount) - SUM (Gutschrift Artikel Kreditbetrag.)

  • Krediteinheiten : es bezieht sich auf insgesamt Einheiten des Artikels (Kreditmenge), die in diesem Monat

im Folgenden sind Tabellen gutgeschrieben wurden :

Rechnungspositionen (Rechnungsdatum, Rechnungsnummer, Produktnummer, Artikelname, Anzahl verkaufter Produkte, Gesamtbetrag)

Inventar Anpassung (Datum, Entity, EntityID, ItemID, Artikelname, Menge, Stückpreis, Lagerbestand, Nettobetrag) Diese Tabelle enthält Stückpreis und Menge eines Artikels, wenn eine Rechnung oder Gutschrift für diesen Artikel generiert wurde. Entität kann "Rechnung" oder "CreditNote" sein. EntityID ist Rechnungs-ID oder CreditNotes ID

Gutschriften (Stornierung Datum, CreditNotes ID, Kundennummer)

Gutschrift Artikel (CreditNotes ID, Artikelnummer, Artikelname, Kredit Menge, Kreditbetrag) Hinweis: Dies ist eine Einzelpostentabelle für die Gutschriftstabelle. CreditNote Datum ist in Stammtabelle verfügbar

Bis jetzt habe ich diese Abfrage, aber ich bin nicht in der Lage, nächsten Schritt der Beitritt mit Gutschrift und Gutschrift Elemente zu verstehen und Nettoumsatz und Menge verkauft.

SELECT 
     inv_items."Invoice Date" inv_date, 
     inv_items."Product ID" inv_items_Prod_ID, 
     inv_items.Item Name, 
     AVG(IDR."Unit Price"), 
     SUM(inv_items."Quantity sold") total_Qty_Sold, 
     SUM(inv_items."Total Amount") inv_ItemsSale 
FROM "Invoice Items" inv_items 
JOIN "Inventory Adjustment" IDR ON IDR."EntityID" = inv_items."Invoice ID" 
    AND IDR."ItemID" = inv_items."Product ID" 
    AND IDR."Date" = inv_items."Invoice Date" 
GROUP BY 1, 
    2, 
    3 

Jede Hilfe wird sehr geschätzt.

+0

Wenn Sie Oracle verwenden, warum Sie eine ANSI-SQL-Abfrage wollen? Die von Ihnen geschriebene Abfrage ist nicht ANSI-kompatibel. –

+0

Sie haben Recht, ich möchte Abfrage in Oracle. Entschuldigen Sie. Ich werde den Beitrag bearbeiten. – manshu116

+1

'Gruppe von 1, 2, 3' funktioniert möglicherweise in anderen Datenbankprodukten (ich glaube, ich lese es), aber es funktioniert nicht in Oracle. 'order by 1, 2, 3' funktioniert, aber für die Gruppierung müssen Sie auf die Spalten nach Namen und nicht nach Zahlen verweisen. – mathguy

Antwort

0

Ich bereitete das Skript nach Ihren Fragen requirments, aber wegen weniger Informationen in Ihrer Frage, wie Datentypen für die Spalten und ihre Struktur, ich bin mir nicht sicher, können Sie einfach versuchen und lassen Sie mich wissen, ob der Code ok ist:

SELECT 
     to_char (inv_items."Invoice Date", 'MONTH') inv_month, 
     inv_items."Product ID" inv_items_Prod_ID, 
     inv_items."Item Name" inv_items_name, 
     AVG(IDR."Unit Price") avg_unit_price, 
     SUM(inv_items."Quantity sold") total_Qty_Sold, 
     SUM(inv_items."Total Amount") inv_ItemsSale, 
     (SUM(inv_items."Quantity sold") - SUM(cni."credit Quantity")) Quantity_Sold, 
     (SUM(inv_items."Total Amount") - SUM(cni."Credit Amount")) Credit_units 
FROM "Invoice Items" inv_items 
JOIN "Inventory Adjustment" IDR 
    ON IDR."EntityID" = inv_items."Invoice ID" 
    AND IDR."ItemID" = inv_items."Product ID" 
    AND IDR."Date" = inv_items."Invoice Date" 
JOIN "Credit Notes" cn 
    ON IDR."EntityID" = cn."CreditNotes ID" 
    AND IDR."Entity" = 'CreditNote' --- filtering by only 'CreditNote' 
JOIN "Credit Note Items" cni 
    ON cn."CreditNotes ID" = cni."CreditNotes ID" 
GROUP BY to_char (inv_items."Invoice Date", 'MONTH'), inv_items."Product ID", inv_items."Item Name"; 

Hoffe, dass es Ihnen helfen)

+0

mit JOIN "Credit Notes" cn und JOIN "Gutschrift Artikel" cni ON cn. "CreditNotes ID" = cni. "CreditNotes ID" gibt nur Kreditpositionen und nicht alle Rechnungspositionen. Also habe ich es mit LINKER VERBINDUNG versucht. Die Ergebnisse scheinen jedoch noch nicht zu stimmen :( – manshu116

+0

Ursache Ich habe Filter (UND IDR. "Entity" = "CreditNote" --- Filterung nur durch "CreditNote"), versuchen, zu löschen und erneut ausführen. Wenn es funktioniert dann nicht vergessen, "Vote" und "Setzen Sie das grüne" -Flag für die Antwort bitte). – Ikrom

+0

Es hat funktioniert. Ich habe JOIN "Bestandsanpassung", LINKE VERBINDEN "Gutschriften" und auch Filter "Entität" = "CreditNote" entfernt. – manshu116

0

Aus Ihrer Abfrage und Beschreibung scheint es, dass invoice_id, product_id und date - sind einzigartig für Rechnungspositionen.

So müssen Sie das gleiche für Gutschrift tun - (. Wählen CNI *, cn.CreditNote Datum von Gutschriften cn, Gutschrift Artikel CNI wo cni.CreditNotes ID = cn.CreditNotes ID) Unter und dann beitreten Diese Unterabfrage nach idr durch die gleichen 3 Spalten.

Auch Sie besser Gruppe von IDR.itemname, IDR.itemid und IDR.Datum