如何在 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

实际上,这只是编写CASE一种简捷方式(尽管不是标准的 SQL)。

与扩展的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

但是,有时必须小心避免这种方法引起的参数嗅探问题

您可以在The Power of SQL CASE Statements 中找到一些不错的示例,我认为您可以使用的语句将类似于以下内容(来自4guysfromrolla ):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees

使用案例。这样的事情。

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END
SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO' 
 END) as Salable
, * 
FROM Product

Microsoft SQL Server(T-SQL)

select ,使用:

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

where子句中,使用:

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end
SELECT
   CASE 
      WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   * 
FROM PRODUCT

通过此链接 ,我们可以了解 T-SQL 中的IF THEN ELSE

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'ALFKI')
  PRINT 'Need to update Customer Record ALFKI'
ELSE
  PRINT 'Need to add Customer Record ALFKI'

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'LARSE')
  PRINT 'Need to update Customer Record LARSE'
ELSE
  PRINT 'Need to add Customer Record LARSE'

对于 T-SQL 来说这还不够吗?

SQL Server 中的简单 if-else 语句:

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';

GO

SQL Server 中的嵌套 If ... else 语句 -

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
  PRINT 'what''s up?';
ELSE
  PRINT 'Bye Ravi Anand.';
END;

GO