SQL-Abfragen verbinden

Hallo Tombe,
vielen Dank für Deinen Beitrag.
Die Prozentwerte werden ao allerdings falsch berechnet. Ich habe das Kommando umgestellt/ergänzt:

Code sql:
1
2
3
4
5
6
7
8
9
SELECT
d01mart,
COUNT(*) AS gesamt,
SUM(CASE WHEN d01status = 4 THEN 1 ELSE 0 END) AS verliehen,
(SUM(CASE WHEN d01status = 4 THEN 1 ELSE 0 END) * 100 / COUNT(*)) AS prozent,
COUNT(*) AS zusatz
FROM d01buch
WHERE d01mtyp = 1
GROUP BY d01mart




Ich bräuchte jetzt aber bei den Prozenten noch mindestens 1 Hinterkommastelle ******

Und mir ist noch nicht die letzte Spalte klar "zusatz".
Spalte 1 "d01mart" bedeutet Medienart, also Bestandsgruppe (mart 22 ist z.B. Geographie)
Spalte 2 "gesamt" - Gesamtanzahl aller Medien in dieser Gruppe
Spalte 3 "entliehen" - Gesamtanzahl aller entliehenen Medien dieser Gruppe
Spalte 4 "prozent" - prozentualer Anteil der entliehenen Medien an der Gesamtanzahl dieser Gruppe
Spalte 5 "zusatz" - mir nicht klar. Ist die selbe Zahl wie in Spalte 2 "gesamt"


Im Anhang 2 Bilddateien:
einmal mit den falschen, einmal mit den richtigen Prozentwerten
in beiden ist auch die Spalte "zusatz" zu sehen

Herzlichen Dank vorab für die Bemühungen.
Muppes
 

Anhänge

  • richtigeprozente.jpg
    richtigeprozente.jpg
    159,7 KB · Aufrufe: 6
  • falscheprozente.jpg
    falscheprozente.jpg
    153,5 KB · Aufrufe: 4
Was die Berechnung angeht, hast du natürlich Recht. Da habe ich mal wieder schlampig geschrieben.

Die Spalte "zusatz" und die zusätzliche COUNT-Anweisung habe ich reingeschrieben, weil du in Beitrag 9 geschrieben hast das du es so brauchst (wie in Beitrag 10 zu lesen, habe ich es nicht verstanden wozu es sein soll).

Die Nachkommastellen bekommst du einfach indem du alle numerischen Werte mit FORMAT entsprechend formatierst.
 
Hast du dir das Beispiel mal ein bisschen genauer angeschaut, dann sollte es doch eigentlich klar werden wie es gemeint ist.

Du schreibst nicht:
SQL:
COUNT(*) AS gesamt,
SUM(CASE WHEN d01status = 4 THEN 1 ELSE 0 END) AS verliehen

sondern:
SQL:
FORMAT(COUNT(*), 2) AS gesamt,
FORMAT(SUM(CASE WHEN d01status = 4 THEN 1 ELSE 0 END), 2) AS verliehen

Also einfach das Feld (oder die Anweisung die den numerischen Wert ermittelt) nach FORMAT in Klammern setzten und dazu mit Komma getrennt die Nachkommastellen angeben. Im obigen Beispiel sind es immer 2 Nachkommastellen.
 
Hallo Tombe,

beim FORMAT-Kommando kommt immer noch eine Fehlermeldung (s. Datei im Anhang). Offenbar wird das Kommando nicht erkannt? Einen Syntaxfehler kann ich nicht erkennen.

Grüße
Muppes
 

Anhänge

  • formatsql.jpg
    formatsql.jpg
    216,4 KB · Aufrufe: 5
Nein nach einem Syntaxfehler sieht es wirklich nicht aus, dann kennt deine Datenbank den Befehl nicht.

Ich hatte schonmal danach gefragt um was für eine Art Datenbank es sich handelt. Wenn man das wüßte, könnte man nach einer Alternative suchen.
 
Hallo,

habe jetzt alles so wie gewünscht.
Arbeite mit SQL unter Sybase ASE 15.0.3.

Abfrage wurde in diesem Fall um die Kommandos STR und ROUND ergänzt:

Code:
SELECT
d01mart AS SystGruppe,
COUNT(*) AS gesamt,
SUM (CASE WHEN d01status=4 THEN 1 ELSE 0 END) AS verliehen,
STR(ROUND(SUM(CASE WHEN d01status=4 THEN 1 ELSE 0 END)*100.0/COUNT(*), 2), 6, 2) AS prozent
FROM d01buch
WHERE d01mtyp=1
GROUP by d01mart

Mit ROUND 2 wird auf 2 Stellen gerundet.
Mit STR und 6, 2 werden nur 6 Stellen angezeigt, incl. des Kommas: max 3 vorm Komma (mehr können es ja nicht sein als Wert 100) und halt 2 hinterm Komma.

Thema jetzt abgehakt.
Habe hier viel gelernt.
Herzlichen Dank an alle, insbesondere Tombe (Thomas).

Grüße vom Muppes (Manfred)
 
Zurück