Anzeige:
Ergebnis 1 bis 8 von 8

Thema: [SQL] Zählen und Berechnen

  1. #1
    Registrierter Benutzer
    Registriert seit
    10.07.2004
    Beiträge
    55

    [SQL] Zählen und Berechnen

    Hallo,

    ich stehe vor einem Problem, wo ich nicht auf die Lösung komme.
    Ich möchte gerne eine SELECT-Anweisung machen, die mir Gebühren berechnet. Diese Gebühren stehen in Stufen von 0 - 2 in einer Tabelle.
    Stufe 1 macht 5€, Stufe 2 macht 10€.

    Ich möchte jetzt für jede Person die Gebühren berechnen lassen.
    Normalerweise ist es ja bei einer einzigen Stufe ganz einfach. Ich mache einfach ein SELECT, wo ich alle Stufen einer Person zusammenzähle, also mit COUNT und dann einfach * z.B. 5 nehme. Dann bekomme ich ja, die Gesamtgebühren heraus. Nur wie mache ich das bei unterschiedlichen Stufen, aber in EINER Abfrage.

    Ich kann ja nicht sagen: SELECT ... , SUM(COUNT(WHERE STUFE LIKE '1')*5 AND COUNT(WHERE STUFE LIKE '2')*10) AS GESAMTGEBUEHREN.

    Im Prinzip sollte es ja so aussehen, aber ich bekomme es nicht realisiert.

    Ich hoffe, ich habe mich mehr oder wenig verständlich ausgedrückt und jemand kann mir helfen.

    Danke im Voraus, GRUSS

  2. #2
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Zitat Zitat von Overlord04
    SELECT ... , SUM(COUNT(WHERE STUFE LIKE '1')*5 AND COUNT(WHERE STUFE LIKE '2')*10) AS GESAMTGEBUEHREN
    Moment mal! Erst mal Klarheit schaffen. Eine einfache Abfrage sieht so aus:
    Code:
    SELECT ... ,COUNT(*)*5 WHERE STUFE LIKE '1' FROM .....
    und dann die zweite Bedingung dazu. Wenn beide Abfragen gleich sind, dann kann man die über UNION verbinden.

    andere Variante: Bau ein Tabelle auf mit den Feldern STUFE und GEBUEHR dann kannst du die Tabellen verknüpfen und geht alles ohne UNION.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  3. #3
    Registrierter Benutzer
    Registriert seit
    10.07.2004
    Beiträge
    55
    Ja, ich weiss, wie eine einfach Abfrage aussieht, aber ich muss ja sowohl die Berechnung mit den 5€ und die mit den 10€ (abhängig von der Stude) in EINE SELECT-Anweisung bekommen.

    Bei zwei Abfragen sehe ja nur anders aus, dass ich eben nach STUFE '2' suche und dann zähle und das Ergebnis * 10, anstatt nach 1 und * 5.

    Ich weiss nicht, ob Du meinst, dass das mit UNION geht, habe mir UNION noch nicht angeguckt, werde das aber mal jetzt tun.

    Das Problem ist ja einfach, dass ich in einer Abfrage die ein und selbe Spalte unterscheidlich behandeln muss. Ist vielleicht ein JOIN sinnvoll ?

    Danke schon mal für deine Antwort.
    Geändert von Overlord04 (04-12-2004 um 02:17 Uhr)

  4. #4
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Hier empfiehlt sich eine Prüftabelle, die nur den Index ('1' oder '2') enthält
    und die Gebühr. die bindest du per join ein (eigentlich solltest du sie auch
    als foreign key nutzen) und berechnest dann aus dem Join.
    Das Ziel ist das Ziel.

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    Vorsicht, von der Lösung mit einer zweiten Tabelle würde ich abraten, es sei denn Du definierst sie als View (sonst besteht die Gefahr der Inkonsistenz).

    Was Du vielleicht nicht weißt ist, dass jedes Ergebnis eines SELECT-Statements als Tabelle in einer anderen SELECT-Anweisung wieterverwendet werden, dh. ein SELECT-Statement ist de facto ein "Tabellen-Konstruktor". Beispiel (zugegebenermaßen etwas dämlich, aber sinnvellere Beispiele kannst Du dir ja über legen):
    Code:
    SELECT a.nr, a.name FROM (SELECT rn,name FROM tbl) a;

  6. #6
    Registrierter Benutzer
    Registriert seit
    10.07.2004
    Beiträge
    55
    @Christoph: Danke für den Tipp. Werde das gleich mal probieren.

    Gruss

  7. #7
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    Zitat Zitat von Christoph
    Vorsicht, von der Lösung mit einer zweiten Tabelle würde ich abraten, es sei denn Du definierst sie als View (sonst besteht die Gefahr der Inkonsistenz).
    sehe ich völlig anders! Es ist nicht nur ok sondern empfehlenswert eine Referenztabelle anzulegen, in der die Provisionsstufen beschrieben sind. Ansonsten baut man ständig Hilfskonsruktionen sowohl im Frontend als auch im Backend alá " ...if stufe = 2 then Gebuehr = 10... "

    Solche Dinge fallen Dir dann auf den Fuß, wenn sich änderungen ergeben.

    ich würde eine Tabelle mit den Feldern

    stufe,
    giltvon,
    giltbis,
    betrag

    anlegen.

    Damit bist du auch bei einer Gebührenänderung auf der sicheren Seite...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  8. #8
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    @elrond

    Ja, du hast recht. Ich hatte nur die Fragestellung gelesen und mir das Datenmodell nicht näher angeschaut und folglich nicht bemerkt, dass das Datenmodell etwas verkorkst war.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •