2.1 Pahayag ng KASO

Mayroong dalawang mga paraan upang magsulat ng isang pahayag sa SQL CASE. Ang unang entry ay nagmumukhang switch mula sa wikang Java, habang ang pangalawang format ay mas katulad ng maramihan if-else.

Magsimula tayo sa unang opsyon - isang analog ng switch. Ang pangkalahatang format ay:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

Talagang halos kapareho sa switch, ang mga salita lamang ay bahagyang naiiba:

SQL Java
kaso x lumipat (x) {
kapag halaga halaga ng kaso:
pagkatapos ay resulta ibalik ang resulta;
ibang resulta default: ibalik ang resulta;
wakas }

Isalin natin ang isang halimbawa mula sa Java sa SQL:

Java SQL
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 Pangalawang bersyon ng CASE statement

Mayroon ding pangalawang bersyon ng operator CASE, na, tulad ng nabanggit sa itaas, ay mas katulad ng maramihan if-else. Ang pangkalahatang format ay:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

Dito, ang mga kundisyon ay sinuri lamang nang sunud-sunod, kung ang alinman sa mga ito ay totoo, pagkatapos ay ibabalik ang tinukoy na resulta. Kung wala sa mga kundisyon ang totoo, ang halaga ay tinukoy sa ELSE.

Isalin natin ang isang halimbawa mula sa Java sa SQL:

Java SQL
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 Lutasin ang problema gamit ang CASE statement

Sumulat tayo ng ilang interesanteng query. Tandaan, mayroon kaming gawain - idagdag ang salitang "EXPIRED!" sa pangalan ng mga nakaraang gawain sa talahanayan ng gawain . Madali itong gawin gamit ang CASE.

Para sa field ng deadline , magmumukha itong pangalawang bersyon ng statement CASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

Isang halimbawa ng kumpletong query gamit ang operator CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

Ang magiging resulta ng query na ito ay:

id emploee_id pangalan deadline
1 1 EXPIRED NA! Ayusin ang isang bug sa frontend 2022-06-01
2 2 Ayusin ang isang bug sa backend 2022-06-15
3 5 Bumili ng kape 2022-07-01
4 5 Bumili ng kape 2022-08-01
5 5 Bumili ng kape 2022-09-01
6 (WALA) Linisin ang opisina (WALA)
7 4 Masiyahan sa buhay (WALA)
8 6 Masiyahan sa buhay (WALA)