datadexx
Goto Top

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:

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!

Content-ID: 1882430660

Url: https://administrator.de/forum/sql-abfrage-problem-1882430660.html

Ausgedruckt am: 22.12.2024 um 01:12 Uhr

em-pie
Lösung em-pie 10.02.2022 um 16:21:33 Uhr
Goto Top
Moin,

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
datadexx
datadexx 10.02.2022 um 16:38:27 Uhr
Goto Top
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.
mbehrens
Lösung mbehrens 10.02.2022 um 17:06:29 Uhr
Goto Top
Zitat von @datadexx:

Sry, ist MariaDB, kein MS-SQL Server. Habe ich vergessen anzugeben.

Leider funktioniert das so in MariaDB (MySQL) nicht.

Versuche es mit AS für die abweichenden Spaltennamen.
datadexx
datadexx 10.02.2022 um 17:24:03 Uhr
Goto Top
Besten Dank an euch!

ich hatte das bereits auf mit AS umgeschrieben und es funktioniert genau so wie ich es haben wollte!
em-pie
em-pie 10.02.2022 aktualisiert um 20:26:07 Uhr
Goto Top
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.
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 face-smile
akretschmer
akretschmer 11.02.2022 um 09:49:25 Uhr
Goto Top
Zitat von @em-pie:

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!
datadexx
datadexx 14.02.2022 um 10:37:32 Uhr
Goto Top
Danke für den Hinweis akretschmer und nochmal Danke für's helfen!