<p>L’instruction <code>CASE</code> est ce qui se rapproche le plus du IF en SQL et est prise en charge dans toutes les versions de SQL Server.</p>
<pre><code class="lang-auto">SELECT CAST(
CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END AS bit) as Saleable, *
FROM Product
</code></pre>
<p>Vous n’avez besoin d’utiliser l’opérateur <code>CAST</code> que si vous souhaitez obtenir le résultat sous forme de valeur booléenne. Si un <code>int</code> vous convient, ceci fonctionne :</p>
<pre><code class="lang-auto">SELECT CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END as Saleable, *
FROM Product
</code></pre>
<p>Les instructions <code>CASE</code> peuvent être imbriquées dans d’autres instructions <code>CASE</code> et même incluses dans des agrégats.</p>
<p>SQL Server Denali (SQL Server 2012) ajoute l’instruction <a href="http://msdn.microsoft.com/en-us/library/hh213574%28v=sql.110%29.aspx">IIF</a> qui est également disponible dans <a href="http://www.techonthenet.com/access/functions/advanced/iif.php">Access</a> (signalé par <a href="https://stackoverflow.com/questions/63447/how-do-you-perform-an-if-then-in-an-sql-select/6769805#6769805">Martin Smith</a>) :</p>
<pre><code class="lang-auto">SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
</code></pre>