none
Prozentuale Anzahl ausgeben RRS feed

  • Frage

  • Hallo zusammen,

    ich sollte die prozentuale Anzahl eines Wertes in meiner Tabelle ausgeben. (Wie oft kommt der Wert in der Tabelle vor?)

    Irgendwie klappt das nicht so richtig.

    Hat jemand eine Idee?

    SELECT
        Klasse,
        CONCAT((SELECT count(Klasse) from Ticketuebersicht) / count(*) * 100, '%') AS proz
    FROM
        Ticketuebersicht
    GROUP BY
        Klasse

    Habs mal so probiert. bekomme aber komische Werte.

    Info: Klasse ist ein varchar.

    Danke und gruß

    Timo

    Donnerstag, 2. Mai 2013 08:57

Antworten

  • Hallo Timo,

    hier mal ein einfaches Beispiel, wie Du die Werte ermitteln kannst: Eine kleine CTE mit der Gesamtanzahl, durch die dann die jeweilige Anzahl dividiert wird.

    DECLARE @Ticketuebersicht AS Table (Klasse varchar(20));
    INSERT INTO @Ticketuebersicht VALUES ('Klasse1');
    INSERT INTO @Ticketuebersicht VALUES ('Klasse2'),('Klasse2');
    INSERT INTO @Ticketuebersicht VALUES ('Klasse3'),('Klasse3'),('Klasse3') ;
    INSERT INTO @Ticketuebersicht VALUES ('Klasse4'),('Klasse4'),('Klasse4'),('Klasse4');
    
    ;WITH total AS
        (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht)
    
    SELECT Klasse
          ,100.0 * COUNT(*) / MAX(total.Gesamt) AS Prozent
    FROM @Ticketuebersicht, total
    GROUP BY Klasse


    Olaf Helper

    Blog Xing

    • Als Antwort markiert TimoB_ Donnerstag, 2. Mai 2013 09:23
    Donnerstag, 2. Mai 2013 09:10

Alle Antworten

  • Hallo Timo,

    hier mal ein einfaches Beispiel, wie Du die Werte ermitteln kannst: Eine kleine CTE mit der Gesamtanzahl, durch die dann die jeweilige Anzahl dividiert wird.

    DECLARE @Ticketuebersicht AS Table (Klasse varchar(20));
    INSERT INTO @Ticketuebersicht VALUES ('Klasse1');
    INSERT INTO @Ticketuebersicht VALUES ('Klasse2'),('Klasse2');
    INSERT INTO @Ticketuebersicht VALUES ('Klasse3'),('Klasse3'),('Klasse3') ;
    INSERT INTO @Ticketuebersicht VALUES ('Klasse4'),('Klasse4'),('Klasse4'),('Klasse4');
    
    ;WITH total AS
        (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht)
    
    SELECT Klasse
          ,100.0 * COUNT(*) / MAX(total.Gesamt) AS Prozent
    FROM @Ticketuebersicht, total
    GROUP BY Klasse


    Olaf Helper

    Blog Xing

    • Als Antwort markiert TimoB_ Donnerstag, 2. Mai 2013 09:23
    Donnerstag, 2. Mai 2013 09:10
  • Danke für den Tipp, hat funktioniert.

    DECLARE @Ticketuebersicht AS Table (Klasse varchar(50));
    INSERT INTO @Ticketuebersicht select Klasse from Ticketuebersicht
    
    ;WITH total AS
        (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht)
    
    SELECT Klasse
          ,100.0 * COUNT(*) / MAX(total.Gesamt) AS Prozent
    FROM @Ticketuebersicht, total
    GROUP BY Klasse



    PS: Kannst du mir noch kurz sagen, wie ich die Prozentspalte auf 2 nachkommastellen beschränke?
    • Bearbeitet TimoB_ Donnerstag, 2. Mai 2013 09:23
    Donnerstag, 2. Mai 2013 09:18
  • Eigentlich ist es Aufgabe des Frontend, die Werte im gewünschtem Format anzuzeigen; aber Du könntest es SQL Server seitig auf einen Datentypen mit festen 2 Nachkommastellen wie Decimal(18, 2) konvertieren:

    DECLARE @Ticketuebersicht AS Table (Klasse varchar(20));
    INSERT INTO @Ticketuebersicht VALUES ('Klasse1');
    INSERT INTO @Ticketuebersicht VALUES ('Klasse2'),('Klasse2');
    INSERT INTO @Ticketuebersicht VALUES ('Klasse3'),('Klasse3'),('Klasse3') ;
    INSERT INTO @Ticketuebersicht VALUES ('Klasse4'),('Klasse4'),('Klasse4'),('Klasse4');
    
    ;WITH total AS
        (SELECT COUNT(*) AS Gesamt FROM @Ticketuebersicht)
    
    SELECT Klasse
          ,CONVERT(decimal(18, 2), (100.0 * COUNT(*) / MAX(total.Gesamt))) AS Prozent
    FROM @Ticketuebersicht, total
    GROUP BY Klasse

    Mit der Round Funktion könntest Du noch die Werte runden lassen.

    Olaf Helper

    Blog Xing

    Donnerstag, 2. Mai 2013 09:36
  • Super.. Danke.
    Donnerstag, 2. Mai 2013 11:07