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-Key: 1882430660

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

Printed on: April 27, 2024 at 23:04 o'clock

Member: em-pie
Solution em-pie Feb 10, 2022 at 15:21:33 (UTC)
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
Member: datadexx
datadexx Feb 10, 2022 at 15:38:27 (UTC)
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.
Member: mbehrens
Solution mbehrens Feb 10, 2022 at 16:06:29 (UTC)
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.
Member: datadexx
datadexx Feb 10, 2022 at 16:24:03 (UTC)
Goto Top
Besten Dank an euch!

ich hatte das bereits auf mit AS umgeschrieben und es funktioniert genau so wie ich es haben wollte!
Member: em-pie
em-pie Feb 10, 2022 updated at 19:26:07 (UTC)
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
Member: akretschmer
akretschmer Feb 11, 2022 at 08:49:25 (UTC)
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!
Member: datadexx
datadexx Feb 14, 2022 at 09:37:32 (UTC)
Goto Top
Danke für den Hinweis akretschmer und nochmal Danke für's helfen!