Between mit Min und Max?!

EuroCent

Klappstuhl 2.0
Hallo zusammen,

ich sitze vor einem kleinen Problemchen :D

Ich möchte via SQL eine Abfrage schaffen die wie folgt aufgebaut wird:
Preis A bis Preis B - Spanne ermitteln und die Werte ausgeben die dazwischen liegen
SQL:
SELECT * FROM [vergleich] WHERE [durchschnittspreis] BETWEEN '200' AND (SELECT MAX([durchschnittspreis]) as durchschnittspreis FROM [vergleich])
Das funktioniert. Aber das hier wiederrum gibt mir kein Ergebnis:
SQL:
SELECT * FROM [vergleich] WHERE [durchschnittspreis] BETWEEN (SELECT MIN([durchschnittspreis]) as durchschnittspreis FROM [vergleich]) AND '200'

Bei dem ersten SQL bekomme Ich alles was Zwischen 200 und Beispielsweise 10000 ist.
Das Datenfeld von durchschnittspreis ist natürlich varchar. :)
Da Ich auch Kommata Werte hinterlegt habe.
Dies könnte Ich umwandeln in ein Double/Float Feld und aus dem . (Punkt) dann ein Kommata machen.

Wäre der Weg da sogar sinnvoller?
 
MySQL? Oracle? MS Access?
Oh, ich denke es ist MS Acceess, da du [] verwendest.

Wenn das Minimum 200 ist und du als Maximum 200 angibst, verwundert es nicht, dass nix rauskommt

Am Sinnvollsten ist es über einen JOIN.

Zahlen als VARCHAR definieren. Eins SÜNDE und ein Schwachsinn. Du machst die damit das leben schwer. Sehr schwer.
Min Access kann zum Beipsiel mit dem Befehl cDbl() keine Kommas verarbeiten, da mein PC auf Schweiz eingestellt ist und einen Punkt als Dezimalzeichen erwartet.
Und zum Vergleichen sollten schon Zahlen verglichen werden. Ansonsten ist 8,5 grösser als 100000000.
Jetzt muss man halt den Text sauber in ein Double bringen. Zum Beispiel damit: [VBA] strToDouble() [Yaslaw.Info]. Das macht das SQL halt langsam, weil jeder Wert der Tabelle durch die Funktion gejagt wird. Wenn du nicht mit MS Access arbeitest, musst du da selber noch was finden, was das bescheuerte deutsche Format in ein Maschinenformat überträgt.
Die siehst, Zahlen als Zahlen speichern ist wichtig. Dass der gespeicherte Wert dann mit Komma oder sonstwie formatiert erscheint, dazu ist das GUI da.

SQL:
select v.*
from 
    vergleich v, 
    (
        select  
            min(strToDouble(durchschnittspreis,'',',')) as min_dp,
            max(strToDouble(durchschnittspreis,'',',')) as max_dp
        from durchschnittspreis 
    ) dp
where 
    strToDouble(v.durchschnittspreis,'',',') BETWEEN dp.min_dp and dp.max_dp
 
Hallo @Yaslaw
vielen Dank für deine Antwort. :)

Habe vergessen zu erwähnen dass es MSSQL ist :D

Nein nein die abfrage wäre dann nicht 200 - 200 sondern der kleinste (ex.: 10) bis 200 :)
Oder eben 200 bis 10000 :D

Aber Ich hab es anders gelöst. :)
Ich habe die Felder in denen der Preis steht in ein Decimal(18,2) umgewandelt und damit geht es nun wunderbar. :)
 
Zurück