Expression CASE (valeur conditionnelle)
Oracle
-- Searched CASE
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;
-- Oracle-specific shortcut: DECODE (equality comparison)
SELECT name, DECODE(status, 'A', 'Active', 'P', 'Passive', 'Unknown') FROM employee;CASE associe une expression à différentes valeurs selon des conditions ; il existe une forme simple (CASE my_column WHEN valeur) et une forme recherchée (CASE WHEN condition). DECODE d'Oracle fait un travail similaire mais ne compare que l'égalité et traite les NULL comme égaux ; préférez CASE pour la portabilité.
PostgreSQL
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;PostgreSQL prend entièrement en charge l'expression CASE standard, utilisable partout où une valeur est produite (SELECT, WHERE, ORDER BY, GROUP BY). Il n'a pas de DECODE à la Oracle ; utilisez CASE à la place, ou COALESCE/NULLIF pour les conditions courtes.
MySQL
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;
-- IF() for a short condition:
SELECT name, IF(active = 1, 'Yes', 'No') FROM employee;MySQL/MariaDB prennent en charge l'expression CASE standard ; il existe aussi la fonction IF(condition, si_vrai, si_faux) pour une condition rapide à deux branches (semblable à IIF de SQL Server). CASE peut être utilisé dans tout contexte d'expression.
SQL Server
SELECT name,
CASE WHEN salary >= 20000 THEN 'high'
WHEN salary >= 10000 THEN 'medium'
ELSE 'low' END AS tier
FROM employee;
-- Shortcut: IIF() (2012+)
SELECT name, IIF(active = 1, 'Yes', 'No') FROM employee;SQL Server prend en charge le CASE standard ; depuis 2012, il existe le raccourci IIF() pour les conditions à deux branches et CHOOSE() pour les correspondances multiples. IIF est en réalité traduit en CASE. CASE peut aussi être utilisé dans ORDER BY et dans les computed columns.
MongoDB
// Closest equivalent: $switch or $cond
db.employee.aggregate([
{ $project: { name: 1, tier: {
$switch: { branches: [
{ case: { $gte: ["$salary", 20000] }, then: "high" },
{ case: { $gte: ["$salary", 10000] }, then: "medium" } ],
default: "low" } } } }
])Dans l'agrégation MongoDB, les équivalents de CASE sont les opérateurs $switch (multibranche) et $cond (if-then-else à trois arguments). Ils s'utilisent dans $project ou $addFields pour créer des champs dérivés conditionnels.
Redis
# Not applicable: Redis has no in-query conditional expression.Redis n'a pas d'expression de requête comme CASE. La logique conditionnelle s'écrit dans le code applicatif ou dans un script Lua côté serveur (EVAL). Une évaluation d'expressions limitée est possible avec APPLY dans FT.AGGREGATE de RediSearch.
Elasticsearch
# Closest equivalent: a condition inside a runtime field or script
GET employee/_search
{
"runtime_mappings": { "tier": { "type": "keyword",
"script": "if (doc['salary'].value >= 20000) emit('high'); else if (doc['salary'].value >= 10000) emit('medium'); else emit('low');" } },
"fields": ["tier"]
}Dans Elasticsearch, la logique CASE dans une requête s'écrit sous forme de script Painless (runtime field, script_fields ou scripted metric). Le flux if/else se définit en langage Painless. L'agrégation 'range' peut aussi produire des buckets de type CASE pour la catégorisation.