Announcement

Collapse
No announcement yet.

CASE im WHERE ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CASE im WHERE ?

    Nach langem verzweifeltem Suchen wende ich mich jetzt an euch, in der Hoffnung das mir hier geholfen werden kann (11880 hatte auch keinen Plan )

    Situation:
    - 2 voneinander unabhängige Tabellen
    - Tabelle 1 besteht aus lediglich 2 Spalten (ID, BOOL) und enthält nur ID = 1 und BOOL = TRUE oder FALSE
    - Tabelle 2 (ist eigentlich eine VIEW) enthält mehrere Datensätze

    Ich möchte jeweils unterschiedliche Datensätze von Tabelle 2 darstellen, abhängig davon ob in Tabelle 1 ein TRUE oder ein FALSE steht.

    Mit meinem Beschränkten SQL wissen hätte ich das ganze jetzt so realisiert:

    Code:
    SELECT *
    FROM DB.dbo.TABELLE2 AS tab2
    WHERE 
    	CASE 
    		WHEN DB.dbo.Tabelle1.bool = 'TRUE'
    			THEN tab2.Alarm LIKE '%F11%'
    		ELSE tab2.Alarm LIKE '%F02%'
    	END
    Kriege aber einen Syntax Error in der nähe von LIKE.

    Was fürn blöden Fehler habe ich da gemacht Geht das überhaupt, da beide Tabelle ja unabhängig von einander sind.

    Danke für eure Hilfe!

  • #2
    Hi,
    was für Spalten gibt's denn in Tabelle 2? Auch eine ID?
    Eine Spalte muss ja die Verbindung zwischen Tabelle 1 und Tabelle 2 sein.
    Vermutlich ist es die ID und dann wäre ein Inner Join Dein Freund.
    Ich rate mal ins Blaue:
    Code:
    select *
    FROM DB.dbo.TABELLE2 AS tab2
    inner join DB.dbo.TABELLE1 AS tab1
    ON tab2.id = tab1.id
    where DB.dbo.Tabelle1.bool = 'TRUE'
    Dein Konstrukt mit Case...then....like geht auf keinen Fall.
    Mir ist auch nicht ganz klar, was Du damit erreichen willst.

    Comment


    • #3
      Danke für deine Antwort.

      Die Tabellen sind jedoch, wie schon geschrieben, unabhängig von einander.
      Somit hilft mir ein JOIN nicht.

      Um mal ein bisschen weiter auszuholen:
      In der Tabelle 1 habe ich die Information, ob die Datendatensätze die ich mir aus Tabelle 2 hole Wochenenden beinhalten sollen, oder nicht. Steht in Tabelle 1 Spalte Bool ein "TRUE", dann sollen die Datensätze die ich aus Tabelle 2 hole keine Wochenenden beinhalten.

      Somit brauche ich quasi eine "variable Filterbedingung".

      War auch nur so eine erste Idee von mir mit dem CASE konstrukt.
      Wenn jemand eine andere Idee hat, immer her damit

      Danke!

      Comment


      • #4
        Hallo Knight,

        so kannst Du das CASE jedenfalls nicht anwenden, macht so auch keinen Sinn.
        Du kannst die Filterbedingung einfach per boolscher Logik verknüpfen:
        [highlight=SQL]SELECT *
        FROM DB.dbo.TABELLE2 AS tab2
        WHERE (DB.dbo.Tabelle1.bool = 'TRUE'
        AND tab2.Alarm LIKE '%F11%'
        )
        OR
        (DB.dbo.Tabelle1.bool <> 'TRUE'
        AND tab2.Alarm LIKE '%F02%'
        )[/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Das ist ja fast zu einfach um von selbst drauf zu kommen .
          Manchmal steh ich auch echt auf dem Schlauch

          Vielen Dank!

          Comment


          • #6
            Achso...
            Angenommen Tabelle1 besteht zudem nur aus einer Zeile besteht, dann mit einer Variablen
            z.B.
            Code:
            declare @ist_wochende as varchar(5)
            set @ist_wochenende = (Select case when DB.dbo.Tabelle1.bool  = 'TRUE' then '%F11%' ELSE '%F02%' END from DB.dbo.Tabelle1)
            
            select * from DB.dbo.Tabelle2
            where tab2.Alarm like @ist_wochenende

            Comment


            • #7
              Jau, Tabelle 1 besteht nur aus einer Zeile (Sorry, wurde aus der Beschreibung nicht richtig deutlich).


              Daher funktioniert die logische Verknüpfung von Olaf auch leider nicht (da war ich etwas voreilig ).

              Das mit der Variable ist ein klasse ansatz.
              Den Weg gehe ich mal weiter. Mein eigentliches Problem ist etwas komplizierter als nur nach '%F11%' etc. zu filtern, habs nur vereinfacht ums deutlicher zu machen.
              Hilft mir aber auf jedenfall erstmal weiter, Danke!

              Comment

              Working...
              X