none
Gesucht SQL Statement RRS feed

  • Frage

  • Hallo ich habe hier folgende zwei Statements:

    --Top wrong vendors

    Select COUNT(*) As Anzahl, Category_After As Kreditor
    from      CCLogDocuments
    Where DELTA = '1'
    GROUP BY Category_After
    ORDER BY COUNT(*) DESC;

    --Top OK vendors
    Select COUNT(*) As Anzahl, Category_After As Kreditor
    from      CCLogDocuments
    Where DELTA = '0'
    GROUP BY Category_After
    ORDER BY COUNT(*) DESC;

     

    Das Eine Statement Zeigt mir eine Tabelle mit 2 Spalten mit dem TOP Falschen, und das zweite Statement eine Tabelle mit den Top Richtigen.

    Jetzt würde ich gerne so ein Ergebnis haben, sortiert nach Prozent:

    AzahlOK, AnzahlFalsch, Kreditor, Prozent

     

    also eine Kombination aus beidem inklusive der Prozentzahl die das Verhältnis von beiden Anzahlen angibt.

    Ich habe schon viel rumprobiert aber ich komme auf keinen grünen zweig ;)

    Vielleicht erbamt sich mir einer.

    Gruß und TIA

    Michael

    Montag, 13. September 2010 21:31

Antworten

  • Versuch mal das (ungetestet):

    with cte as
    (Select 
    sum(case when delta = '1' then 1 else 0 end) As AnzahlOK,
    sum(case when delta = '0' then 1 else 0 end) As AntahlFalsch,
    Category_After As Kreditor
    from      CCLogDocuments
    GROUP BY Category_After
    )

    select AnzahlOK, AnzahlFalsch, Kreditor, Anzahlfalsch*100/AnzahlOK as Prozent from cte
    Order by Prozent

    Ansonsten poste mal Tabellensttrucktur, Beispieldaten und das erwartete Ergebnis.

    Gruß
    Christa

    • Als Antwort markiert Maxim Khaikine Mittwoch, 15. September 2010 21:29
    Dienstag, 14. September 2010 05:18
  • Hallo Michael,

    Indem Du auch in dem Fall eine CASE WHEN Unterscheidung auf AnzahlOK = 0 machst:

    with cte as

    (SELECT sum(case when delta = '1' then 1 else 0 end) As AnzahlOK,

            sum(case when delta = '0' then 1 else 0 end) As AntahlFalsch,

            Category_After As Kreditor

     FROM      CCLogDocuments

     GROUP BY Category_After

    )

    SELECT AnzahlOK, AnzahlFalsch, Kreditor

           ,CASE WHEN AnzahlOK = 0 THEN 100.0

                 ELSE Anzahlfalsch * 100/AnzahlOK

            END as Prozent

    FROM cte

    ORDER BY Prozent

     


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    • Als Antwort vorgeschlagen Elmar BoyeEditor Mittwoch, 15. September 2010 07:45
    • Als Antwort markiert Maxim Khaikine Mittwoch, 15. September 2010 21:30
    Dienstag, 14. September 2010 06:06
  • danke funktioniert wunderbar!

     

    --Prozent falsch/richtig pro Kreditor ;grid;706;400;
    with cte as
    (SELECT sum(case when delta = '0' then 1 else 0 end) As AnzahlOK, 
        sum(case when delta = '1' then 1 else 0 end) As AnzahlFalsch,
        Category_After As Kreditor
     FROM CCLogDocuments
     GROUP BY Category_After
    )
    
    SELECT AnzahlOK, AnzahlFalsch, Kreditor
        ,CASE WHEN AnzahlOK = 0 THEN 0.0
           ELSE (AnzahlOK * 1.0/(AnzahlOK* 1.0 + Anzahlfalsch* 1.0)) * 100.0
        END as Prozent 
    FROM cte
    ORDER BY Prozent desc;
    
    Mittwoch, 15. September 2010 21:33

Alle Antworten

  • Versuch mal das (ungetestet):

    with cte as
    (Select 
    sum(case when delta = '1' then 1 else 0 end) As AnzahlOK,
    sum(case when delta = '0' then 1 else 0 end) As AntahlFalsch,
    Category_After As Kreditor
    from      CCLogDocuments
    GROUP BY Category_After
    )

    select AnzahlOK, AnzahlFalsch, Kreditor, Anzahlfalsch*100/AnzahlOK as Prozent from cte
    Order by Prozent

    Ansonsten poste mal Tabellensttrucktur, Beispieldaten und das erwartete Ergebnis.

    Gruß
    Christa

    • Als Antwort markiert Maxim Khaikine Mittwoch, 15. September 2010 21:29
    Dienstag, 14. September 2010 05:18
  • Hallo Christa,

    danke! Also das hier funktioniert schon:

    with cte as
    (Select 
    sum(case when delta = '1' then 1 else 0 end) As AnzahlOK, 
    sum(case when delta = '0' then 1 else 0 end) As AnzahlFalsch,
    Category_After As Kreditor
    from CCLogDocuments GROUP BY Category_After
    )
    select AnzahlOK, AnzahlFalsch, Kreditor from cte

    nur das mit dem Prozent, da kommt noch ne Aunahme (division bei zero) kann man das irgendwie umgehen das dann immer ne 100 rauskommt wenns keine falschen gibt?

    Gruß

    Michael

    Dienstag, 14. September 2010 05:35
  • Hallo Michael,

    Indem Du auch in dem Fall eine CASE WHEN Unterscheidung auf AnzahlOK = 0 machst:

    with cte as

    (SELECT sum(case when delta = '1' then 1 else 0 end) As AnzahlOK,

            sum(case when delta = '0' then 1 else 0 end) As AntahlFalsch,

            Category_After As Kreditor

     FROM      CCLogDocuments

     GROUP BY Category_After

    )

    SELECT AnzahlOK, AnzahlFalsch, Kreditor

           ,CASE WHEN AnzahlOK = 0 THEN 100.0

                 ELSE Anzahlfalsch * 100/AnzahlOK

            END as Prozent

    FROM cte

    ORDER BY Prozent

     


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    • Als Antwort vorgeschlagen Elmar BoyeEditor Mittwoch, 15. September 2010 07:45
    • Als Antwort markiert Maxim Khaikine Mittwoch, 15. September 2010 21:30
    Dienstag, 14. September 2010 06:06
  • danke funktioniert wunderbar!

     

    --Prozent falsch/richtig pro Kreditor ;grid;706;400;
    with cte as
    (SELECT sum(case when delta = '0' then 1 else 0 end) As AnzahlOK, 
        sum(case when delta = '1' then 1 else 0 end) As AnzahlFalsch,
        Category_After As Kreditor
     FROM CCLogDocuments
     GROUP BY Category_After
    )
    
    SELECT AnzahlOK, AnzahlFalsch, Kreditor
        ,CASE WHEN AnzahlOK = 0 THEN 0.0
           ELSE (AnzahlOK * 1.0/(AnzahlOK* 1.0 + Anzahlfalsch* 1.0)) * 100.0
        END as Prozent 
    FROM cte
    ORDER BY Prozent desc;
    
    Mittwoch, 15. September 2010 21:33