Kleines optisches Problem bei Gesammtsumme (Mariadb)

  • Hi,
    mit folgender Tabelle:


    und folgenden Daten:



    generated 2018-11-10 16:56:33 by HeidiSQL 9.4.0.5125

    führe ich folgende Abfrage durch:

    Code
    1. select
    2. ifnull (Nachname,'Summe') as Name,
    3. Zähler,
    4. SUM(cast(Zähler as decimal(5,0))) as Betrag from test
    5. group by Nachname with rollup


    und erhalte wunschgemäß folgendes Ergebnis mit Teil- und Gesammtsumme:



    generated 2018-11-10 17:00:54 by HeidiSQL 9.4.0.5125


    Jetzt stört mich nur noch der Zähler '12' in der (Gesammt-)Summen Zeile. Wie kann ich den auf "" setzen? Hab schon alles mögliche ausprobiert und bin nun ratlos.
    Irgendwelche Ideen?

  • Jep, das ist mir schon bewußt (VARCHAR und Umlaute). Ich bau hier ja auch nur eine genau so aufgebaute Tabelle nach, die ich leider nicht so ohne weiteres ändern kann.
    Allerdings hab ich case und if schon erfolglos ausprobiert, könntest Du Deinen Tip nicht etwas präzisieren?

  • Naja, Du solltest schon den Original-Aufbau Deiner Tabelle hier zeigen und nicht irgendwie nachbauen.
    Solltest Du die Spalte Zähler wirklich als VARCHAR deklariert haben, kannst Du die genau so behandeln, wie die Spalte Nachname.


    In Deinem Code-Beispiel hast Du für Nachname dies gemacht:

    Code
    1. [COLOR=#333333]ifnull (Nachname,'Summe') as Name[/COLOR]

    das kannst Du dann auch mit der Spalte Zähler, vorausgesetzt, die Zeilen sind von Dir und Du weißt, was dort passiert...


    Nochmal kurz zum Thema Datentypen: Zähler - was besser zaehler oder counter heißen sollte - müsste den Werten nach zu urteilen ein INT sein.
    Wenn es Dir bei der Ausgabe auf ein leeres Feld ankommt ( was im Grunde ja Text/String, also bspw. ein VARCHAR wäre ), wird die Ausgabe gecastet:

    SQL
    1. SELECT CAST(`IntSpalte` AS VARCHAR(5)) AS Zaehler from `tabelle`


    Die Spalte selber sollte aber ein numerischer Datentyp bleiben.

  • Aber genau das ist mein Problem: Ich habe einen genau definierten Wert für Nachname (ISNULL) in der Summenzeile, für alle folgenden Spalten wird halt irgend etwas eingefügt und das hätte ich halt gern gelöscht. Klar kann ich die Zählerspalte durch eine Funktion ersetzen, z.B. Max, aber damit erhalte ich halt auch nur wieder irgendeinen Wert, den ich so auch nicht ändern kann.


    BTW Die original Daten kommen aus 3 Tabellen. Die will ich in einer temp. Tabelle sammeln, womit VARCHAR für Zahlen und Umlaute in den Spaltenüberschriften entfallen.

  • Es ist echter Code mit echten Daten (wenn auch nur als Test) und natürlich ist Nachname NULL durch die Summenbildung mit group by with rollup.

    Code
    1. select
    2. # ifnull (Nachname,'Summe') as Name,
    3. Nachname as Name,
    4. MAX(cast(Zähler as decimal(5,0))) as Zahl,
    5. SUM(cast(Zähler as decimal(5,0))) as Betrag
    6. from
    7. test
    8. group by
    9. Nachname with rollup

    liefert:


    generated 2018-11-12 08:45:28 by HeidiSQL 9.4.0.5125