如何在 SQL SELECT
语句中执行 IF...THEN
?
例如:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
如何在 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语句,它也可以在Access中使用(由Martin Smith指出)。
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
在这种情况下,case语句是您的朋友,有两种形式:
简单形式:
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>
你甚至可以在order by子句中放置case语句以实现非常炫酷的排序。
从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
你可以在SQL CASE语句的威力中找到一些不错的例子,我认为你可以使用以下语句(来自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
从这个链接我们可以了解在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(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
where Obsolete = 'N' or InStock = 'Y'
并且实际上将 where 减半呢? - maraaaaaaaa SELECT
CASE
WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE'
ELSE 'FALSE'
END AS Salable,
*
FROM PRODUCT
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
SELECT
中使用吗? - abdul qayyum