[NEWSboard IBMi Forum]

Thema: SUM(Case)

  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    SUM(Case)

    Hallo,
    habe da ein Problem mit einem Sum(Case ..).

    Ich möchte, wenn in VZT2 <> 0 as drin steht diesen Wert ansonsten den Wert VZT1 summieren.

    SELECT
    SUM(Case When VZT2 <> 0 then VZT2 ELSE VZT1 END)
    FROM MyFile

    Mit diesem Sql bekomme ich das Ergebnis 2190 anstatt von 955.

    Was mache ich da falsch?

    Code:
    VZT1  VZT2           Ergebnis(gewünschtes)   
    440      0              440       
    205      0              205       
     60      0               60       
     40     18               18       
    270    117              117       
     25      0               25       
     90      0               90       
                           =====      
                            955
    Gruß und Dank
    Tarki

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Was liefert dieser SELECT mit CASE aber ohne SUM() an Werten?

  3. #3
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hi,
    folgende Werte erhalte ich mit CASE:
    Code:
    Ausdruck CASE 
           440    
           440    
           440    
           205    
           205    
            60    
            60    
            18    
           117    
            25    
            90    
            90

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Na das ergibt doch genau die 2190.

    Zitat Zitat von tarkusch Beitrag anzeigen
    Hi,
    folgende Werte erhalte ich mit CASE:
    Code:
    Ausdruck CASE 
           440    
           440    
           440    
           205    
           205    
            60    
            60    
            18    
           117    
            25    
            90    
            90

  5. #5
    Registriert seit
    Apr 2012
    Beiträge
    360
    Ja schon, aber ich hätte gerne das Ergebniss: 955 gehabt

    Im Case frage ich ja ab, ob VZT2 größer als 0 ist.

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Deine Werte ergeben nunmal in Summe 2190 und nicht 955.

    Dein SELECT mit CASE liefert den Wert 440 insgesamt 3 Mal, das ergibt ja schon 1320.

  7. #7
    Registriert seit
    Apr 2012
    Beiträge
    360
    Funktioniert das Select mit CASE nicht Zeilenweise?

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Mach mal "SELECT VZT1, VZT2 FROM MyFile" und rechne nochmal nach. Deine 955 können nicht ganz stimmen.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Vielleicht willst du ja nur eindeutige Werte ?
    440 3x, 90 2x

    sum(distinct case ...)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Dec 2011
    Beiträge
    11
    sieht mir eher danach aus, als hättest du noch einen JOIN in deinem Query, der bei der Verknüpfung von 2 Tabellen einige Zeilen dupliziert. In diesem Fall solltest du dir die Verknüpfungsbedingung nochmal anschauen ...

  11. #11
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke Herr Fuerchau und natürlich die anderen Mitglieder,
    mit Distinct
    SELECT SUM(Distinct Case When VZT2 <> 0 then VZT2 ELSE VZT1 END) FROM MyFile
    komme ich zu dem gewünschten Ergebnis.

    Ich habe mir die Workdatei MyFile aufgebaut und im Programm abgefragt, ob das Feld VZT2 leer ist und dann dementsprechend summiert.

    Wenn ich folgendes Statement aufrufe:
    SELECT VZT1, VZT2 FROM MyFile
    Group by Feld1, Feld2, Feld3
    bekomme ich dieses Ergebnis:
    Code:
    VZT1  VZT2               
    440      0                      
    205      0                     
     60      0                       
     40     18                     
    270    117                      
     25      0                       
     90      0
    Habe ich mit dem Group by ... nicht eindeutige Werte?
    Bewirkt das Distinct in diesem Fall das nur Zeile für Zeile verglichen wird?

    Danke

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Mit dem Group by werden die Werte auf Feld1, Feld2 und Feld3 verdichtet. Diese Felder haben jedoch nichts mit den Werten, die aus den Feldern VTZ1 und VTZ2 kommen zu tun!

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL-Anforderung
    By fpxx in forum NEWSboard Programmierung
    Antworten: 15
    Letzter Beitrag: 18-10-12, 16:58
  2. SQL: SpaltenÜberschrift als Variable
    By WoD in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 23-06-09, 06:17
  3. SUM mit Bedingung
    By linguin in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 24-04-07, 11:22
  4. SQL Select mit SUM aus einer DB
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 30-03-06, 12:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •