Case

CASE-satsen utvärderar en lista av villkor och det åtföljs av minst ett par WHEN och THEN satser. Den måste avslutas med END, men ELSE är valfritt. ELSE fångar upp värden som inte är specificerade. CASE kan användas i vilket uttryck eller vilken sats som helst som tillåter ett giltigt uttryck. Till exempel, kan du använda CASE i uttryck som SELECT, UPDATE, DELETE och SET, samt i satser som select_list, IN, WHERE, ORDER BY och HAVING. CASE-satsen har två format:

Den enkla CASE-satsen

Den enkla CASE-satsen jämför ett uttryck med statiska värden. Endast i den enkla CASE-satsen, skriver man ”column_name” efter CASE. Värdena ”value1” och ”value2” skiljer sig mot den sökta CASE-satsen, som i stället har villkor där.

CASE column_name
WHEN ”value1” THEN ”result1”
WHEN ”value2” THEN ”result2”

END

 

Exempel:

Här används CASE för att lägga till 500 kronor i budgeten för trämaterial och 1000 kronor i budget för verktyg. ”Ny budget” är den nya kolumnen för CASE-satsen.

SELECT
    ProjektNamn,
    Budget,
CASE ProjektNamn
    WHEN 'WorkingTools' THEN Budget + 1000
    WHEN 'WorkingWood' THEN Budget + 500
ELSE Budget
END
    "Ny budget"
FROM
    HomeProject;

Den sökta CASE-satsen

Den sökta CASE-satsen jämför ett uttryck med en eller flera logiska villkor. Här har ”column_name” i den enkla CASE-satsen, flyttat ner till ”value1” och ”value2” och i stället bildat ”condition1” och ”condition2”.

CASE
WHEN ”condition1” THEN ”result1”
WHEN ”condition2” THEN ”result2”

END

 

Exempel:

SELECT
    FilmName,
    FilmMinutes,
CASE
    WHEN FilmMinutes <= 90 THEN 'Short'
    WHEN FilmMinutes <= 150 THEN 'Medium'
    WHEN FilmMinutes <= 180 THEN 'Long'
ELSE 'Mer än 180 minuter'
END AS [Kolumnalias]
FROM
    Film;

Observera att i ovanstående exempel måste man börja med 90 och sluta med 180, annars får alla filmer som är 180 minuter eller kortare, värdet Long. För att undvika överlappning, kan man lägga till uttrycket FilmMinutes > 150 efter 180 med AND emellan och på samma sätt efter 150, FilmMinutes > 90. Hela CASE-satsen är en vald kolumn precis som FilmName och FilmMinutes och där ska det vara ett kommatecken efter FilmMinutes. Om jag väljer ytterligare en kolumn efter CASE-satsen, ska det också avslutas med ett kommatecken.

CASE-sats och WHERE

Det går även bra att lägga till en WHERE-sats och eftersom den satsen inte fungerar med alias, måste vi lägga in hela kolumnen. Alltså hela CASE-satsen utan alias.

SELECT
    FilmName,
    FilmMinutes,

CASE
    WHEN FilmMinutes <= 90 THEN 'Short'
    WHEN FilmMinutes <= 150 THEN 'Medium'
    WHEN FilmMinutes <= 180 THEN 'Long'
ELSE 'Mer än 180 minuter'
END AS [Kolumnalias]
FROM
    Film
WHERE
CASE
    WHEN FilmMinutes <= 90 THEN 'Short'
    WHEN FilmMinutes <= 150 THEN 'Medium'
    WHEN FilmMinutes <= 180 THEN 'Long'
ELSE 'Mer än 180 minuter'
END = 'Medium';

Här visas alla filmer som är har längden medium. Att upprepa hela CASE-satsen kanske inte är så smidigt. Kanske är det en bättre idé att använda CTE?

CASE – Söka ord i titel

Ett annat sätt att använda CASE på är att kontrollera om ett ord eller en fras förekommer i filmtiteln. För det använder man LIKE och wildcard.

SELECT
    FilmName,

CASE
    WHEN FilmName LIKE '%star trek%' THEN 'Inte bra'
ELSE 'Vill se'
END
FROM
    Film;

CASE – Datum, tidsperioder

CASE är också användbart för att kontrollera datum och tidsperioder.

SELECT
    FilmName,
    FilmDate,

CASE
    WHEN FilmDate < '1980-01-01' THEN 'Gamla filmer'
ELSE 'Moderna filmer'
END
FROM
    Film;

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *