Einsatz von case when then in SQL (MS SQL Server)

Manchmal ist es notwendig, auch in einem SQL-Statement eine Fallunterscheidung durchzuführen.
Die generelle Syntax dafür sieht folgendermaßen aus:

SELECT ProductId,
ProductCat =
CASE ProductBehavorial
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
ELSE 'Not for sale'
END,
ProductName
FROM ProductItems
ORDER BY ProductId

Das kann auch schnell etwas verschachtelter aussehen, wenn Subselects und weitere Funktionen wie isNull() mit in das Statement kommen, hier noch ein weiteres Beispiel dazu mit Verwendung von Untescheidungen anhand von integer-Werten:

SELECT col1,col2,col3,
CASE
WHEN isnull((select value1 from table2 prti where col1 = value1),0) > 90 THEN 'sehr gut'
WHEN isnull((select value1 from table2 prti where col1 = value1),0) > 79 THEN 'gut'
WHEN isnull((select value1 from table2 prti where col1 = value1),0) > 69 THEN 'befriedigend'
WHEN isnull((select value1 from table2 prti where col1 = value1),0) > 59 THEN 'ausreichend'
WHEN isnull((select value1 from table2 prti where col1 = value1),0) > 49 THEN 'mangelhaft'
WHEN isnull((select value1 from table2 prti where col1 = value1),0) > 10 THEN 'ungenügend'
ELSE 'katastrophal'
END as myrating

Die CASE/WHEN Kombination kann auch in der ORDER BY-Klausel verwendet werden, das sieht dann so aus:

SELECT col1, col2
FROM HumanResources.Employee
ORDER BY
CASE col2 WHEN 1 THEN col1 END DESC,
CASE WHEN col2 = 0 THEN col1 END;

In einem UPDATE-Statement sieht die Verwendung so aus:

UPDATE table1
SET column1 =
( CASE
WHEN ((column1 - 10.00) < 0) THEN column1 + 15
ELSE (column1 + 20.00)
END
)
WHERE column2 = 0;

Schreibe einen Kommentar