CASE (Lakehouse v1)
Gère la logique SI/ALORS. Il est structuré avec au moins une paire d’instructions WHEN et THEN. Chaque instruction CASE doit se terminer par le mot-clé END. L’instruction ELSE est facultative : elle permet de capturer les valeurs non explicitement spécifiées dans les instructions WHEN et THEN.
Syntaxe SQL
Section intitulée « Syntaxe SQL »case( (<condition_1>, <value_1>), (<condition_2>, <value_2>), [ ... ] [ else_=<value_n>])Exemples Analyze
Section intitulée « Exemples Analyze »Un exemple simple
Section intitulée « Un exemple simple »Cet exemple renvoie le nom d’une personne. Il commence par vérifier si la colonne du prénom contient une valeur (le « si »). S’il y a une valeur, il concatène le prénom avec le nom de famille et le renvoie (le « alors »). S’il n’y a pas de prénom, il renvoie uniquement le nom de famille (le « sinon »).
case( (table.first_name.is_not(None), func.concat(table.first_name, table.last_name)), else_=table.last_name)Un exemple plus complexe avec plusieurs conditions
Section intitulée « Un exemple plus complexe avec plusieurs conditions »Cet exemple renvoie un prix en fonction de la quantité. « Si » la quantité de la commande est supérieure à 100, le client bénéficie du prix spécial. Si la première condition n’est pas satisfaite, on passe à la seconde. Si la quantité est supérieure à 10 (de 11 à 100), le client bénéficie du prix de gros. Sinon, le client bénéficie du prix normal.
case( (order_table.qty > 100, item_table.specialprice), (order_table.qty > 10, item_table.bulkprice), else_=item_table.regularprice)Cet exemple renvoie l’initiale du prénom de la personne. Si le nom de l’utilisateur est wendy, il renvoie W. Sinon, si le nom de l’utilisateur est jack, il renvoie J. Sinon, il renvoie E.
case( (users_table.name == "wendy", "W"), (users_table.name == "jack", "J"), else_='E')Ce qui précède peut aussi s’écrire sous forme abrégée :
case( {"wendy": "W", "jack": "J"}, value=users_table.name, else_='E')Autres exemples
Section intitulée « Autres exemples »Dans cet exemple, issu d’une étape Table:Lookup, nous mettons à jour la colonne « dock_final » lorsque la valeur de table1.dock_final est Null.
case( (table1.dock_final == Null, table2.dock_final), else_ = table1.dock_final)Cet exemple est issu d’une étape Table:Lookup où nous mettons à jour la colonne « Marketing Channel » lorsque « Marketing Channel » dans table1 n’est pas ‘none’ ou que le « Serial Number » contient un ‘_’.
case( (get_column(table1, 'Marketing Channel') != 'none', get_column(table1, 'Marketing Channel')), (get_column(table1, 'Serial Number').contains('_'), get_column(table1, 'Marketing Channel')), (get_column(table2, 'Marketing Channel').is_not(Null), get_column(table2, 'Marketing Channel')), else_ = 'none')Syntaxe SQL
Section intitulée « Syntaxe SQL »CASE WHEN <condition_1> THEN <value_1> [ WHEN <condition_2> THEN <value_2> ] [ ... ] [ ELSE <value_n> ]END AS <column_name>Exemples SQL
Section intitulée « Exemples SQL »Cet exemple classe les salaires des employés à l’aide d’une instruction CASE et présente le détail avec une colonne attribuée dynamiquement, nommée « SalaryCategory » :
-- Create a sample tableCREATE TABLE Employee ( EmployeeID INT, FirstName VARCHAR(50), LastName VARCHAR(50), Salary INT);
-- Insert some sample dataINSERT INTO Employee VALUES (1, 'John', 'Doe', 50000);INSERT INTO Employee VALUES (2, 'Jane', 'Smith', 60000);INSERT INTO Employee VALUES (3, 'Bob', 'Johnson', 75000);INSERT INTO Employee VALUES (4, 'Alice', 'Williams', 90000);
-- Add a new column 'SalaryCategory' using CASE statement-- Categorize employees based on their salarySELECT EmployeeID, FirstName, LastName, Salary, CASE WHEN Salary < 60000 THEN 'Low' WHEN Salary >= 60000 AND Salary < 80000 THEN 'Medium' WHEN Salary >= 80000 THEN 'High' ELSE 'Unknown' END AS SalaryCategoryFROM Employee;
┌──────────────────────────────────────────────────────────────────────────────────────────┐│ employeeid │ firstname │ lastname │ salary │ salarycategory │├─────────────────┼──────────────────┼──────────────────┼─────────────────┼────────────────┤│ 1 │ John │ Doe │ 50000 │ Low ││ 2 │ Jane │ Smith │ 60000 │ Medium ││ 4 │ Alice │ Williams │ 90000 │ High ││ 3 │ Bob │ Johnson │ 75000 │ Medium │└──────────────────────────────────────────────────────────────────────────────────────────┘