Michael: SQL Server

Hallo,

ich möchte folgendes SELECT-Statement im SQL-Server ausführen:

SELECT username, (userid>20) AS irgendwas FROM usertable;

Aber der SQL-Server weigert sich und stört sich an dem Vergleich (wo ich gerne ein Wahrheitswert, in welcher Form auch immer, zurückhaben möchte). Denn wenn man

SELECT 1=1 FROM usertable;

ausführen möchte, kommt diesselbe Fehlermeldung (Syntaxfehler in der Nähe von '=').
Wie kann man solche Vergleiche in Statements realisieren (in MS Access funktionieren sie übrigens einwandfrei).

Vielen Dank schon im Voraus
Gruss
   Michael

  1. Die Bedingung kommt am Ende:

    SELECT username AS irgendwas FROM usertable WHERE (userid > 20)

    Hallo,

    ich möchte folgendes SELECT-Statement im SQL-Server ausführen:

    SELECT username, (userid>20) AS irgendwas FROM usertable;

    Aber der SQL-Server weigert sich und stört sich an dem Vergleich (wo ich gerne ein Wahrheitswert, in welcher Form auch immer, zurückhaben möchte). Denn wenn man

    SELECT 1=1 FROM usertable;

    ausführen möchte, kommt diesselbe Fehlermeldung (Syntaxfehler in der Nähe von '=').
    Wie kann man solche Vergleiche in Statements realisieren (in MS Access funktionieren sie übrigens einwandfrei).

    Vielen Dank schon im Voraus
    Gruss
       Michael

    1. Hallo,

      Die Bedingung kommt am Ende:
      SELECT username AS irgendwas FROM usertable WHERE (userid > 20)

      ich möchte ja nicht das er nur die Zeilen mit userid>20 ausgibt, sondern trotzdem alle Zeilen bekommen und eine Spalte halt als Indikator ob da die ID größer als 20 ist oder nicht.
      Und DAS bekomme ich leider nicht hin.

      Gruß
         Michael

      1. Hallo,

        auf die Gefahr in das es jemanden interessiert möchte ich die von mir inzwischen gefundene Antwort bekannt geben.

        Folgendermassen sieht das Statemant dann aus:

        SELECT
          username,
          CASE WHEN (userid>20) THEN 1 ELSE 0 END AS irgendwas
        FROM usertable;

        Dieses CASE-Konstrukt gehört aber meines Wissens nach nicht zu SQL-92 sondern ist eine Spezialität von INFORMIX und SQL-Server.
        Für MS Access oder PostgreSQL ist die in der Frage gezeigte Variante gültig. Wer sowas für Oracle braucht sollte sich mal die Anweise DECODE anschauen.

        Gruß
           Michael

        1. Hallo Michael und Glückwunsch,

          aber das ist ja furchtbar. Das sieht doch voll nach BASIC-Syntax aus. Naja wird man wohl oder übel mit leben müssen.

          *nicht aufreg* *ganz ruhig*

          Gruß
          Andreas

    2. Hallo Carsten,

      Die Bedingung kommt am Ende:

      SELECT username AS irgendwas FROM usertable WHERE (userid > 20)

      Die Bedingungen zur Auswahl der zurückzugebenden Zeilen kommen in den Where-Zweig. Aber "Parser"-Funktionen, die die Ausgabe verändern, kommen in den select-zweig, z.B.:

      select max(id) from my_table;
      select count(name) from my_table where age>18; (Gibt die Anzahl der Leute, die älter als 18 sind)

      select alter, (alter>=18) as volljaehrig, name from my_table; bring normalerweise schon die Ausgabe:

      +-------+-------------+-----------+
      | alter | volljaehrig | name      |
      +-------+-------------+-----------+
      |    10 |           0 | Fritzchen |
      |    20 |           1 | Fritz     |
      |.............                    |
      +-------+-------------+-----------+

      Nur der SQL-Server will halt nich. Der is nämlisch ä bissl bleede.

      Gruß
      Andreas

      Hallo,

      ich möchte folgendes SELECT-Statement im SQL-Server ausführen:

      SELECT username, (userid>20) AS irgendwas FROM usertable;

      Aber der SQL-Server weigert sich und stört sich an dem Vergleich (wo ich gerne ein Wahrheitswert, in welcher Form auch immer, zurückhaben möchte). Denn wenn man

      SELECT 1=1 FROM usertable;

      ausführen möchte, kommt diesselbe Fehlermeldung (Syntaxfehler in der Nähe von '=').
      Wie kann man solche Vergleiche in Statements realisieren (in MS Access funktionieren sie übrigens einwandfrei).

      Vielen Dank schon im Voraus
      Gruss
         Michael

  2. Hallo,

    ich möchte folgendes SELECT-Statement im SQL-Server ausführen:

    SELECT username, (userid>20) AS irgendwas FROM usertable;

    Aber der SQL-Server weigert sich und stört sich an dem Vergleich (wo ich gerne ein Wahrheitswert, in welcher Form auch immer, zurückhaben möchte). Denn wenn man

    SELECT 1=1 FROM usertable;

    ausführen möchte, kommt diesselbe Fehlermeldung (Syntaxfehler in der Nähe von '=').
    Wie kann man solche Vergleiche in Statements realisieren (in MS Access funktionieren sie übrigens einwandfrei).

    Ich sag nur MICROSOFT *kopfschüttel*. Sorry, nichts persönliches. Mir war nur so. Geht schon wieder. Tja, bei mysql gehts.

    1. Lösungsansatz: Ich kenn mich jetzt mit VIEWs nicht aus, aber da kann man wohl alles in alles umwandeln, zumindest theoretisch. Also in Deinem VIEW stünde dann true oder false schon drin. da der VIEW aber virtuell ist, also nur eine Sicht auf ein oder mehrere Tabellen, ist er auch immer aktuell. Dei eine Ex-Kollege, der das kann, sagte mal, daß er von mir nur eine Regel brauchte, wie man aus der einen Gruppe von Zahlen(z.B. ungerade) den ACSII-Code für ein 'X' und aus der anderen Zahlengruppe (meinetwegen die geraden) ein Leerzeichen ' ' basteln könne. Das war zwar dann eine recht wüste Formel, aber es funktionierte.

    Da kam glaube sowas raus:
    'X' entspricht ascii 88, das Leerzeichen der 32
    wahrheitswert = (-1^zahl)*(-23)+55

    Um Zahlen in die Gruppen größer und kleiner einer grenze zu zerlegen, ginge folgender Ansatz:

    wahrheitswert = (zahl-grenze-0.5)/abs(zahl-grenze-0.5) ...
    Damit hast Du wieder -1 und +1, die Du dann wie oben strecken könntest. die 0.5 ist hier wichtig, sonst kommt bei einer zahl=grenze dann 0/0. Das Beispiel setzt natürlich Integer-Zahlen vorraus. Dezimalzahlen kann man aber sicher zu Integers parsen und durch vorheriges aufaddieren einer 0.5 oder einer 0.x richtig oder speziell runden.

    2. Lösungsansatz: Im Frontend, wenn's jetzt um ein Programm geht, kann man natürlich auch dort das Ergebnis auswerten und die Ausgabe am Frontend entsprechend gestalten. Ist sicher der einfachere Weg

    3. SQL-Server deinstallieren und Oracle oder MySQL installieren ;-)

    Vielen Dank schon im Voraus

    Bitte, bitte; hoff ich konnte helfen.

    Gruss
       Michael

    1. Hallo,

      Ich sag nur MICROSOFT *kopfschüttel*. Sorry, nichts persönliches. Mir war nur so. Geht schon wieder. Tja, bei mysql gehts.

      Mir ist bei Microsoft auch öfters so. :-)
      Aber wenn die Forderung so gestellt ist, dann muss ich nunmal das tun was verlangt wird. Man versucht ja schon immer zu beeinflussen aber nicht immer klappt das. :-)

      1. Lösungsansatz:

      Hatte ich auch schon überlegt. Erschien mir dann doch etwas zu kompliziert und ich sagte mir, dass es irgendwie gehen muss. Hab dann ja auch eine Lösung gefunden (siehe anderes Posting)
      Aber VIEWS sind allgemein eine recht mächtige Möglichkeit für verschiedene "Transformations"probleme.

      1. Lösungsansatz:

      Klingt auch gut. Leider habe ich nur beschränkte Zugriffsmöglichkeiten auf den Quellcode des Frontends.

      1. SQL-Server deinstallieren und Oracle oder MySQL installieren ;-)

      Hey. Sooo schlecht ist der SQL-Server ja nun auch nicht. :-)
      Und da er ursrünglich nicht von Microsoft programmiert wurde läßt hoffen, dass noch einiges Gute in ihm ist. :-)

      Bitte, bitte; hoff ich konnte helfen.

      Nicht direkt. Trotzdem Danke für die Mühe
      Gruß
         Michael