Benutzer mit den meisten Antworten
Gesucht SQL Statement

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
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 ProzentAnsonsten poste mal Tabellensttrucktur, Beispieldaten und das erwartete Ergebnis.
Gruß
Christa- Als Antwort markiert Maxim Khaikine Mittwoch, 15. September 2010 21:29
-
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
-
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;
- Als Antwort markiert Robert BreitenhoferModerator Samstag, 18. September 2010 21:10
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 ProzentAnsonsten poste mal Tabellensttrucktur, Beispieldaten und das erwartete Ergebnis.
Gruß
Christa- Als Antwort markiert Maxim Khaikine Mittwoch, 15. September 2010 21:29
-
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
- Bearbeitet Maxim Khaikine Dienstag, 14. September 2010 05:38 formatierung
- Bearbeitet Robert BreitenhoferModerator Samstag, 18. September 2010 21:09 Formatierung
-
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
-
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;
- Als Antwort markiert Robert BreitenhoferModerator Samstag, 18. September 2010 21:10