Rechnen innerhalb einer SQL Abfrage

Registrierer

Erfahrenes Mitglied
Ich hab eine Umsatzhitliste erstellt.
Nur wie stelle ich es an, dass die Summenumsätze vor dem Jahr 2001 durch 0,51129 geteilt werden, weil ja da noch die gute alte DMark am Start war?
Evtl. 2 Abfragen mit UNION verbinden?

Code:
SELECT
Sum(rechnungen.SUMME_NE) AS summe, kunden.NAME_1, kunden.KDNR
FROM
rechnungen Inner Join kunden ON kunden.KDNR = rechnungen.KDNR
WHERE
rechnungen.JAHR >  '2001'
GROUP BY
rechnungen.KDNR
ORDER BY
summe DESC
 
Ich würde das mit eine CASE/WHEN abfrage machen:

SQL:
SELECT 
CASE
   WHEN rechnungen.Jahr > '2001' THEN SUM(rechnungen.SUMME_NE) / EUREOUMRECHNER as summe
   WHEN rechnungen.Jahr < '2001' THEN SUM(rechnungen.SUMME_NE) / DMARKUMRECHNER as summe 
END

So in etwa, ungetestet!
 
Nicht ganz. Das würde ein GROUP BY auf das Rechnungsjahr bedeuten, da der SUM in der Formel ist.
Was für eine DB ist es?

Bei MySQL kannst du mit IF() im SUM() arbeiten
SQL:
SELECT
  SUM(IF(rechnungen.Jahr <= 2001, (rechnungen.SUMME_NE/0,51129, rechnungen.SUMME_NE)) AS summe
  ...

Bei Oracle etc mit CASE und innerhalb der SUM()
SQL:
SELECT
  SUM(CASE 
  	WHEN rechnungen.JAHR <= 2001
  	THEN rechnungen.SUMME_NE/0,51129
  	ELSE rechnungen.SUMME_NE
  END) AS summe,
  ....


Ps. Ich verschiebs mal zu den Datenbanken....
 
Zuletzt bearbeitet von einem Moderator:
Bei MySQL kannst du mit IF() im SUM() arbeiten
SQL:
SELECT
  SUM(IF(rechnungen.Jahr <= 2001, (rechnungen.SUMME_NE/0,51129, rechnungen.SUMME_NE)) AS summe
  ...

Ist eine SQL Datenbank.
Code:
Sum(if(JAHR <  '2002', (SUMME_NE/0.51129, SUMME_NE))) AS summe
bringt mir einen Syntaxfehler:
for the right syntax to use near ')) AS summe FROM

Ich belese mich besser erstmal...
 
Zuletzt bearbeitet von einem Moderator:
Fast alle Datenbanken sind SQL Datenbanken. Sorry, doch diese Antwort ist etwa: Was für ein Auto fährst du? Ein Auto mit vie Räder.

Die erste schliessende Klammer gehört vor das Komma - mein Fehler
SQL:
Sum(if(JAHR <  '2002', (SUMME_NE/0.51129), SUMME_NE)) AS summe
 
Zuletzt bearbeitet von einem Moderator:
Fast alle Datenbanken sind SQL Datenbanken. Sorry, doch diese Antwort ist etwa: Was für ein Auto fährst du? Ein Auto mit vie Räder.

Nun ich würde ja gerne konkret antworten, kann aber mit der Frage nicht wirklich etwas anfangen...

-- SQLversion 3.2.0.1
-- Server Version: 5.1.37
-- PHP-Version: 5.3.0

Ist es das, was Du wissen musst?

Es funktioniert übrigens, danke.
Mir fällt auf, dass ohne ELSE Anweisung alles nach 2002 nicht gerechnet wird und die Gesamtsummen jetzt schon stimmen ohne das man das explizit angibt.
Könnte man das mit ELSE noch unterteilen?
 
Mit PHP - wird wohl MySQL sein.

Zu deiner Frage: Die versteh ich leider gar nicht. Also den Sachverhalt versteh ich nicht. Ohne else ahst du alles und du willst das else noch unterteilen? Lass es doch weg wenn du so schon alles hast.
Und je, den else-teil kann man weiter unterteilen. Bei CASE WHEN kannst du auch beliebige Anzahl WHEN haben

SQL:
CASE
  WHEN jahr <= 2001 
  THEN 'a'
  WHEN jahr <= 2006 
  THEN 'b'
  WHEN monat =12
  THEN 
    CASE
      WHEN tag = 15
      THEN 'x'
      ELSE 'y'
    END
  ELSE 'd'
END
 
Zuletzt bearbeitet von einem Moderator:
MySQL, und Danke, das war nur eine theoretische Frage.
Worin unterscheiden sich diese Formen, bzw. wann benutzt man welche Form?
Code:
mysql> SELECT IF(1>2,2,3);
oder z.B.:
Code:
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
    ->     WHEN 2 THEN 'two' ELSE 'more' END;
 
Das IF() ist MySQL-Spezifiesch und kein allgemeines SQL. Zudem hat IF() nur Entweder/Oder. Kann verschiedenste Unterscheidungen machen. Studiere mal die Doku dazu.
 

Neue Beiträge

Zurück