tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
420
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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
     

  2. #2
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Ich würde das mit eine CASE/WHEN abfrage machen:

    Code sql:
    1
    2
    3
    4
    5
    
    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!
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    Code sql:
    1
    2
    3
    
    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()
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    
    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....
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  4. #4
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    Zitat Zitat von Yaslaw Beitrag anzeigen
    Bei MySQL kannst du mit IF() im SUM() arbeiten
    Code sql:
    1
    2
    3
    
    SELECT
      SUM(IF(rechnungen.Jahr <= 2001, (rechnungen.SUMME_NE/0,51129, rechnungen.SUMME_NE)) AS summe
      ...
    Ist eine SQL Datenbank.
    Code :
    1
    
    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...
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    Code sql:
    1
    
    SUM(IF(JAHR <  '2002', (SUMME_NE/0.51129), SUMME_NE)) AS summe
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    Zitat Zitat von Yaslaw Beitrag anzeigen
    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?
     

  7. #7
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von Registrierer Beitrag anzeigen
    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?

    MySQL
    Oracle
    PostgreSQL
    MSSQL

    nur mal so um einige zu nennen...
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    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
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  9. #9
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    MySQL, und Danke, das war nur eine theoretische Frage.
    Worin unterscheiden sich diese Formen, bzw. wann benutzt man welche Form?
    Code :
    1
    
    mysql> SELECT IF(1>2,2,3);
    oder z.B.:
    Code :
    1
    2
    
    mysql> SELECT CASE 1 WHEN 1 THEN 'one'
        ->     WHEN 2 THEN 'two' ELSE 'more' END;
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Das IF() ist MySQL-Spezifiesch und kein allgemeines SQL. Zudem hat IF() nur Entweder/Oder. Kann verschiedenste Unterscheidungen machen. Studiere mal die Doku dazu.
    Registrierer bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  11. #11
    Registrierer Registrierer ist offline Mitglied Gold
    Registriert seit
    Mar 2009
    Beiträge
    171
    Bin ich gerade bei... Vielen Dank.
    Wem es noch interessiert:
    http://dev.mysql.com/doc/refman/5.1/...functions.html
     

Ähnliche Themen

  1. [SQL] Rechnen in einer Abfrage
    Von error_on im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 20.10.11, 14:01
  2. Antworten: 3
    Letzter Beitrag: 03.06.07, 12:07
  3. AND Abfrage innerhalb einer m:n Beziehung
    Von CObject im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 26.12.06, 20:10
  4. Problem mit Rechnen und einer Abfrage
    Von Kerwin im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 09.09.04, 16:55
  5. Antworten: 2
    Letzter Beitrag: 02.12.02, 16:59