datadexx
Goto Top

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:

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!

Content-ID: 645600

Url: https://administrator.de/contentid/645600

Ausgedruckt am: 15.11.2024 um 21:11 Uhr

it-frosch
Lösung it-frosch 29.01.2021 um 09:32:19 Uhr
Goto Top
Hallo datadexx,

warum fasst du dir die beiden Tabellen nicht in einer View zusammen?

Es fällt mir schwer durch deinen Beitrag überhaupt "gedanklich durchzusteigen".

grüße vom it-frosch
datadexx
datadexx 30.01.2021 um 01:12:31 Uhr
Goto Top
Hab es gelöst, besten Dank trotzdem!