如何在SQL SELECT中执行IF ... THEN?
  如何在SQL SELECT语句中执行IF...THEN ? 
例如:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
  CASE语句在SQL中最接近IF,并且在所有版本的SQL Server上都受支持 
SELECT CAST(
             CASE 
                  WHEN Obsolete = 'N' or InStock = 'Y' 
                     THEN 1 
                  ELSE 0 
             END AS bit) as Saleable, * 
FROM Product
  如果你想把结果作为一个布尔值,你只需要做CAST ,如果你对一个int很满意,这个工作就可以了: 
SELECT CASE 
            WHEN Obsolete = 'N' or InStock = 'Y' 
               THEN 1 
               ELSE 0 
       END as Saleable, * 
FROM Product
  CASE语句可嵌入其他CASE语句中,甚至包含在聚合中。 
SQL Server Denali(SQL Server 2012)添加了访问中也可用的IIF语句:(由Martin Smith指出)
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
案件陈述是你在这种情况下的朋友,并采取以下两种形式之一:
简单的情况:
SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>
扩展案例:
SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>
您甚至可以将case语句放在order by子句中,以便进行真正的花式排序。
  从SQL Server 2012中,您可以使用IIF功能。 
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product 
  这实际上只是一种简写(尽管不是标准的SQL)写CASE 。 
  与扩展的CASE版本相比,我更喜欢简洁。 
  IIF()和CASE都可以在SQL语句中作为表达式解析,并且只能在明确定义的位置使用。 
CASE表达式不能用于控制Transact-SQL语句,语句块,用户定义的函数和存储过程的执行流程。
  如果您的需求不能满足这些限制(例如需要根据某些条件返回不同形状的结果集),那么SQL Server也会有一个程序化的IF关键字。 
IF @IncludeExtendedInformation = 1 
  BEGIN 
      SELECT A,B,C,X,Y,Z 
      FROM   T 
  END 
ELSE 
  BEGIN 
      SELECT A,B,C 
      FROM   T 
  END 
但是,有时必须注意避免使用这种方法的参数嗅探问题。
链接地址: http://www.djcxy.com/p/2753.html