Benötige Hilfe bei einer SQL Abfrage
Hallo an alle SQL Gurus von euch, ich benötige eure Hilfe!
Folgendes Problem habe ich. In einer Software (auf PHP + mySQL Basis) gibt es zwei Module, die jeweils in einer eigenen Tabelle ihre Daten für die Rechnungsstellung ablegen.
Nennen wir das erste Modul A und das zweite B. Bis vor kurzem waren diese beiden Module unabhängig voneinander, mussten aber zusammengeführt werden. Wenn man in Modul B eine Rechnung erstellt wird parallel dazu eine Rechnung in A angelegt (Modul B wird eigentlich nur noch zur Erfassung genutzt) und die Rechnungsnummer (rgnr) aus B in ein Feld (palrgnr) in A eingetragen. Wird jetzt eine Gutschrift in B (kann auch eine Teilgutschrift sein) dazu erstellt, wird die Gutschriftnummer in A in das Feld palgsnr eingetragen, ansonsten ist das Feld palgsnr bei normalen Rechnungen aus A leer oder es steht '00000' drin. Modul B legt die Posten zu seinen Rechnungen in einer eigenen Tabelle dafür ab. Während der Gutschrifterstellung wird den Posten die begutschriftet werden die Gutschriftnummer (palgsnr) zugewiesen (Feld gsrgnr).
Jetzt macht mir die OPO-Liste für Modul A ein Problem, da der Kunde in dieser die Gutschriften aus Modul B berücksichtigt haben will.
Folgend habe ich versucht das zu lösen, was bei Rechnungen aus A auch klappt, aber sobald Gutschriften aus B mit ins Spiel kommen klappt es nicht mehr. Zuerst hole ich mir die palgsnr aus den Rechnungen wie folgt um diese an die zweite Abfrage zu übergeben:
Die eigentliche Abfrage sieht dann so aus:
Erschwerend kommt hinzu das in Modul B keine Mehrwertsteuer berechnet bzw. gespeichert wird. B kennt nur einen netto Preis. Das System erkennt auch nur den Steuersatz (Konjunkturpaket) anhand des Datums, deshalb die CASE Geschichte. Was am Ende herauskommen soll ist, asumme soll die Summe netto der Rechnungen aus dem ausgewählten Zeitraum enthalten abzgl. der Gutschriften aus B und bsumme die brutto Summe. Zu erwähnen ist noch, das die Abfrage (je nach Kunde) Gutschriften aus B enthalten kann oder aber auch nicht, wenn keine erstellt wurden.
Besten Dank für eure Hilfe vorab!
Folgendes Problem habe ich. In einer Software (auf PHP + mySQL Basis) gibt es zwei Module, die jeweils in einer eigenen Tabelle ihre Daten für die Rechnungsstellung ablegen.
Nennen wir das erste Modul A und das zweite B. Bis vor kurzem waren diese beiden Module unabhängig voneinander, mussten aber zusammengeführt werden. Wenn man in Modul B eine Rechnung erstellt wird parallel dazu eine Rechnung in A angelegt (Modul B wird eigentlich nur noch zur Erfassung genutzt) und die Rechnungsnummer (rgnr) aus B in ein Feld (palrgnr) in A eingetragen. Wird jetzt eine Gutschrift in B (kann auch eine Teilgutschrift sein) dazu erstellt, wird die Gutschriftnummer in A in das Feld palgsnr eingetragen, ansonsten ist das Feld palgsnr bei normalen Rechnungen aus A leer oder es steht '00000' drin. Modul B legt die Posten zu seinen Rechnungen in einer eigenen Tabelle dafür ab. Während der Gutschrifterstellung wird den Posten die begutschriftet werden die Gutschriftnummer (palgsnr) zugewiesen (Feld gsrgnr).
Jetzt macht mir die OPO-Liste für Modul A ein Problem, da der Kunde in dieser die Gutschriften aus Modul B berücksichtigt haben will.
Folgend habe ich versucht das zu lösen, was bei Rechnungen aus A auch klappt, aber sobald Gutschriften aus B mit ins Spiel kommen klappt es nicht mehr. Zuerst hole ich mir die palgsnr aus den Rechnungen wie folgt um diese an die zweite Abfrage zu übergeben:
SELECT palgsnr FROM `rechnung` WHERE (rechnung.Status <2 OR rechnung.Status >3) AND GS !=1 AND srechnung IS NULL AND rechnung.RGDatum BETWEEN '$sqldat1' AND '$sqldat2' AND palgsnr !='' && palgsnr !='00000'.
$implodeGSNr = implode(',',$GSNr);
if($implodeGSNr =='')
{
$implodeGSNr = 0;
}
Die eigentliche Abfrage sieht dann so aus:
SELECT (IF(palgsnr ='' OR palgsnr ='00000', SUM(NETTO)-(SELECT SUM(preis) from postenmprg WHERE gsrgnr IN(".$implodeGSNr.")), SUM(NETTO))) as asumme
, RGDatum,
(IF(palgsnr ='' OR palgsnr ='00000', SUM(BRUTTO)-(SELECT SUM(preis)*(CASE WHEN RGDatum BETWEEN '2020-07-01' AND '2020-12-31' THEN 1.16 ELSE 1.19 END)- SUM(preis) from postenmprg WHERE gsrgnr IN(".$implodeGSNr.")), SUM(BRUTTO))) as bsumme
FROM rechnung
WHERE (rechnung.Status <2 OR rechnung.Status >3) AND GS !=1 AND srechnung IS NULL AND rechnung.RGDatum BETWEEN '$sqldat1' AND '$sqldat2' AND KD_NUMMER='xyz'
Erschwerend kommt hinzu das in Modul B keine Mehrwertsteuer berechnet bzw. gespeichert wird. B kennt nur einen netto Preis. Das System erkennt auch nur den Steuersatz (Konjunkturpaket) anhand des Datums, deshalb die CASE Geschichte. Was am Ende herauskommen soll ist, asumme soll die Summe netto der Rechnungen aus dem ausgewählten Zeitraum enthalten abzgl. der Gutschriften aus B und bsumme die brutto Summe. Zu erwähnen ist noch, das die Abfrage (je nach Kunde) Gutschriften aus B enthalten kann oder aber auch nicht, wenn keine erstellt wurden.
Besten Dank für eure Hilfe vorab!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 645600
Url: https://administrator.de/forum/benoetige-hilfe-bei-einer-sql-abfrage-645600.html
Ausgedruckt am: 22.12.2024 um 01:12 Uhr
2 Kommentare
Neuester Kommentar