Wiederholende Case-Statements auslagern und mehrmalig verwenden

kirilb

Benutzer
Beiträge
14
Hallo zusammen, wie kann man wiederholende Case-Statements (im Select, Group by usw) auslagern, benennen und dann mittels dieses Namen mehrmalig verwenden?
 
Werbung:
Hallo zusammen, wie kann man wiederholende Case-Statements (im Select, Group by usw) auslagern, benennen und dann mittels dieses Namen mehrmalig verwenden?

So (falls ich Dein Problem richtig verstanden habe):

Code:
test=*# select case when 1=1 then 'ja' end as antwort;
 antwort
---------
 ja
(1 row)

test=*# select antwort, antwort, antwort from (select case when 1=1 then 'ja' end as antwort) dumme_abfrage;
 antwort | antwort | antwort
---------+---------+---------
 ja  | ja  | ja
(1 row)
 
Das klingt schon mal gut. Kann man es weniger ausgefallen gestalten, damit ich das Prinzip verstehe. Würde so was gehen?
test =
CASE n
WHEN 1 THEN 'Sehr gut'
WHEN 2 THEN 'Gut'
WHEN 3 THEN 'Befriedigend'
WHEN 4 THEN 'Ausreichend'
WHEN 5 THEN 'Mangelhaft'
WHEN 6 THEN 'Ungenügend'
END ;
/
SELECT test FROM Zeugnisse;
 
da muss man aber Schreibrechte haben, oder? Geht es nicht simpler, man legt am Anfang des eigentlichen SQL-Statements wie "Variablen" einmalig fest und verwendet sie später mehrmalig. Aber nur mit Leserechten.
 
Hm simpler ist das sicher nicht, aber denkbar:
Code:
DECLARE    @query1 VARCHAR(2000),
        @query2 VARCHAR(2000)

SET        @query1 = '
SELECT
(    CASE '
SET        @query2 = '
    WHEN 1 THEN ''Sehr gut''
    WHEN 2 THEN ''Gut''
    WHEN 3 THEN ''Befriedigend''
    WHEN 4 THEN ''Ausreichend''
    WHEN 5 THEN ''Mangelhaft''
    WHEN 6 THEN ''Ungenügend''
END )'
EXEC(@query1 + '1' + @query2)
Dynamisches SQL kann aber sehr sehr frickelig werden und du kannst dein EXEC nicht einfach innerhalb eines Querys aufrufen sondern musst alles erst als Char zusammen bauen.
 
Warum muss man 2 Variablen setzen, geht es nicht nur mit einer?:
Code:
DECLARE    @query1 VARCHAR(2000)
SET        @query1 = '
SELECT
CASE n
    WHEN 1 THEN ''Sehr gut''
    WHEN 2 THEN ''Gut''
    WHEN 3 THEN ''Befriedigend''
    WHEN 4 THEN ''Ausreichend''
    WHEN 5 THEN ''Mangelhaft''
    WHEN 6 THEN ''Ungenügend''
END )'
 
Das mit den 2 Variablen habe ich gemacht um den ursprünglichen Wert, in diesem Fall die 1, in den Code einsetzen zu können. Hättest du eine SP, was sicher bequemer wäre, könntest du eine 1 an die SP übergeben und würdest ein Sehr gut zurück bekommen.

Hier mal noch ein anderer Weg um Variablen in dynamischem SQL-Code einzusetzen:
Code:
DECLARE    @query VARCHAR(2000)

SET        @query = '
SELECT
(    CASE @@1@@
    WHEN 1 THEN ''Sehr gut''
    WHEN 2 THEN ''Gut''
    WHEN 3 THEN ''Befriedigend''
    WHEN 4 THEN ''Ausreichend''
    WHEN 5 THEN ''Mangelhaft''
    WHEN 6 THEN ''Ungenügend''
END )'

SET        @query = replace(@query,'@@1@@','1')

EXEC(@query)
 
Werbung:
Zurück
Oben