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!
Please also mark the comments that contributed to the solution of the article
Content-Key: 1882430660
Url: https://administrator.de/contentid/1882430660
Printed on: April 27, 2024 at 23:04 o'clock
7 Comments
Latest comment
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!