SQL Abfrage Problem
Servus an die SQL Gurus,
ich habe ein Problem mit einer Abfrage welches ich nicht gelöst bekomme.
Um die folgende Abfrage geht es:
Ich möchte das k.FIRMA, u.FIRMA in einer Spalte als Firma ausgegeben wird. So wie das jetzt ist wird eine Spalte Firma für kundenstamm und eine Spalte Firma für unternehmerstamm ausgegeben mit jeweils NULL Werten. Ich möchte jedoch das es nur eine Spalte Firma gibt und die NULL Ergebnisse gar nicht ausgegeben werden.
Besten Dank für eure Unterstützung!
ich habe ein Problem mit einer Abfrage welches ich nicht gelöst bekomme.
Um die folgende Abfrage geht es:
SELECT k.FIRMA , u.FIRMA AS Firma,
COUNT(DISTINCT r.RG_NUMMER) AS 'Anzahl der RG',
SUM(r.NETTO) AS 'Summe netto',
SUM(r.BRUTTO) AS 'Summe brutto'
FROM rechnung r
LEFT JOIN kundenstamm k ON r.KD_NUMMER = k.MYID
LEFT JOIN unternehmerstamm u ON r.KD_NUMMER = u.MYID
WHERE r.Status <2
AND r.GS != 1
AND YEAR(r.RGDatum) = '2021'
GROUP BY 1
ORDER BY 3 DESC
Ich möchte das k.FIRMA, u.FIRMA in einer Spalte als Firma ausgegeben wird. So wie das jetzt ist wird eine Spalte Firma für kundenstamm und eine Spalte Firma für unternehmerstamm ausgegeben mit jeweils NULL Werten. Ich möchte jedoch das es nur eine Spalte Firma gibt und die NULL Ergebnisse gar nicht ausgegeben werden.
Besten Dank für eure Unterstützung!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1882430660
Url: https://administrator.de/contentid/1882430660
Ausgedruckt am: 15.11.2024 um 21:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
wenn ich dich richtig verstanden habe und davon ausgehe, dass du einen MS SQL einsetzt:
(habe es optisch mal etwas anders dargestellt).
Mit COALESCE kannst du sagen, wenn Wert 1 null ist, nimm Wert 2, wenn Wert 2 null ist, nimm Wert 3 (hier 'UNKNOWN')
Gruß
em-pie
wenn ich dich richtig verstanden habe und davon ausgehe, dass du einen MS SQL einsetzt:
SELECT
[FIRMA] = COALESCE(k.FIRMA, u.FIRMA, 'UNKNOWN')
, [INVOICES] = COUNT(DISTINCT r.RG_NUMMER)
, [NETTO] = SUM(r.NETTO)
, [BRUTTO] = SUM(r.BRUTTO)
FROM rechnung r
LEFT JOIN kundenstamm k ON r.KD_NUMMER = k.MYID
LEFT JOIN unternehmerstamm u ON r.KD_NUMMER = u.MYID
WHERE r.Status <2
AND r.GS != 1
AND YEAR(r.RGDatum) = '2021'
GROUP BY [FIRMA], [INVOICES]
ORDER BY 3 DESC
(habe es optisch mal etwas anders dargestellt).
Mit COALESCE kannst du sagen, wenn Wert 1 null ist, nimm Wert 2, wenn Wert 2 null ist, nimm Wert 3 (hier 'UNKNOWN')
Gruß
em-pie
Zitat von @datadexx:
Sry, ist MariaDB, kein MS-SQL Server. Habe ich vergessen anzugeben.
Leider funktioniert das so in MariaDB (MySQL) nicht.
Leider funktioniert das so in MariaDB (MySQL) nicht.
Versuche es mit AS für die abweichenden Spaltennamen.
Zitat von @datadexx:
Hallo em-pie,
besten Dank für Deine Antwort!
Sry, ist MariaDB, kein MS-SQL Server. Habe ich vergessen anzugeben.
Leider funktioniert das so in MariaDB (MySQL) nicht.
Hallo em-pie,
besten Dank für Deine Antwort!
Sry, ist MariaDB, kein MS-SQL Server. Habe ich vergessen anzugeben.
Leider funktioniert das so in MariaDB (MySQL) nicht.
SELECT
COALESCE(k.FIRMA, u.FIRMA, 'UNKNOWN') as FIRMA
, COUNT(DISTINCT r.RG_NUMMER) as INVOICES
, SUM(r.NETTO) as NETTO
, SUM(r.BRUTTO) as BRUTTO
FROM rechnung r
LEFT JOIN kundenstamm k ON r.KD_NUMMER = k.MYID
LEFT JOIN unternehmerstamm u ON r.KD_NUMMER = u.MYID
WHERE r.Status <2
AND r.GS != 1
AND YEAR(r.RGDatum) = '2021'
GROUP BY COALESCE(k.FIRMA, u.FIRMA, 'UNKNOWN')
ORDER BY 3 DESC
so müsste es dann fluppen.
Edit: Läuft ja nun
Zitat von @em-pie:
Moin,
wenn ich dich richtig verstanden habe und davon ausgehe, dass du einen MS SQL einsetzt:
Moin,
wenn ich dich richtig verstanden habe und davon ausgehe, dass du einen MS SQL einsetzt:
Nur als Hinweis: man sieht auf einen Blick, daß es nur MySQL oder eines der Derivate sein kann, denn keine andere Datenbank ist so buggy, daß bei einer Abfrage mit Aggregation nicht geprüft wird, daß alle nichtaggregierten Spalten gruppiert sind. Statt einer Fehlermeldung kommt ein Zufallsergebniss.
Das ist ein Alleinstellungsmerkmal von MySQL!