博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在SQL SELECT中执行IF…THEN?
阅读量:2291 次
发布时间:2019-05-09

本文共 8292 字,大约阅读时间需要 27 分钟。

如何在SQL SELECT语句中执行IF...THEN

例如:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

#1楼

如果您是第一次将结果插入表中,而不是将结果从一个表转移到另一个表,那么这在Oracle 11.2g中有效:

INSERT INTO customers (last_name, first_name, city)    SELECT 'Doe', 'John', 'Chicago' FROM dual    WHERE NOT EXISTS         (SELECT '1' from customers             where last_name = 'Doe'             and first_name = 'John'            and city = 'Chicago');

#2楼

使用纯位逻辑:

DECLARE @Product TABLE (    id INT PRIMARY KEY IDENTITY NOT NULL   ,Obsolote CHAR(1)   ,Instock CHAR(1))INSERT INTO @Product ([Obsolote], [Instock])    VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N');WITH cteAS(    SELECT        'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)       ,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)       ,*    FROM        @Product AS p)SELECT    'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]   ,*FROM    [cte] c

请参阅请参见。

首先,您需要计算选定条件下的truefalse值。 这是两个 :

for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)

组合在一起得出1或0。接下来使用 。

这是最方法。


#3楼

通过 ,我们可以了解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来说这还不够吗?


#4楼

对于使用SQL Server 2012的用户,IIF是一项已添加的功能,可以替代Case语句。

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *FROM   Product

#5楼

SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newrefFrom profile

#6楼

case statement some what similar to if in SQL serverSELECT CASE             WHEN Obsolete = 'N' or InStock = 'Y'                THEN 1                ELSE 0        END as Saleable, * FROM Product

#7楼

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

DECLARE @val INT;SET @val = 15;IF @val < 25PRINT 'Hi Ravi Anand';ELSEPRINT 'By Ravi Anand.';GO

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

DECLARE @val INT;SET @val = 15;IF @val < 25PRINT 'Hi Ravi Anand.';ELSEBEGINIF @val < 50  PRINT 'what''s up?';ELSE  PRINT 'Bye Ravi Anand.';END;GO

#8楼

这不是答案,只是我在工作中使用的CASE语句的示例。 它具有嵌套的CASE语句。 现在您知道为什么我的眼睛被交叉了。

CASE orweb2.dbo.Inventory.RegulatingAgencyName    WHEN 'Region 1'        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState    WHEN 'Region 2'        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState    WHEN 'Region 3'        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState    WHEN 'DEPT OF AGRICULTURE'        THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg    ELSE (            CASE orweb2.dbo.CountyStateAgContactInfo.IsContract                WHEN 1                    THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty                ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState                END            )    END AS [County Contact Name]

#9楼

SQL Server 2012中添加了一个新功能 (我们可以简单地使用它):

SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product

#10楼

SELECT 1 AS Saleable, *  FROM @Product WHERE ( Obsolete = 'N' OR InStock = 'Y' )UNIONSELECT 0 AS Saleable, *  FROM @Product WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )

#11楼

SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product

#12楼

SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0              END AS Saleable, * FROM Product

#13楼

作为CASE语句的替代解决方案,可以使用表驱动的方法:

DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))INSERT INTO @Product VALUES(1,'N','Y'),(2,'A','B'),(3,'N','B'),(4,'A','Y')SELECT P.* , ISNULL(Stmt.Saleable,0) SaleableFROM    @Product P    LEFT JOIN        ( VALUES            ( 'N', 'Y', 1 )        ) Stmt (Obsolete, InStock, Saleable)        ON  P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete

结果:

ID          Obsolete   InStock    Saleable----------- ---------- ---------- -----------1           N          Y          12           A          B          03           N          B          14           A          Y          1

#14楼

SELECT   CAST(    CASE WHEN Obsolete = 'N'     or InStock = 'Y' THEN ELSE 0 END AS bit  ) as Saleable, * FROM   Product

#15楼

题:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

ANSI:

Select   case when p.Obsolete = 'N'   or p.InStock = 'Y' then 1 else 0 end as Saleable,   p.* FROM   Product p;

使用别名(在这种情况下为p将有助于防止出现问题。


#16楼

您可以通过两种选择来实际实现:

  1. 使用从SQL Server 2012中引入的IIF:

    SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
  2. 使用Select Case

    SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END as Saleable, * FROM Product

#17楼

将会是这样的:

SELECT OrderID, Quantity,CASE    WHEN Quantity > 30 THEN "The quantity is greater than 30"    WHEN Quantity = 30 THEN "The quantity is 30"    ELSE "The quantity is under 30"END AS QuantityTextFROM OrderDetails;

#18楼

为了完整起见,我要补充一点,SQL使用三值逻辑。 表达方式:

obsolete = 'N' OR instock = 'Y'

可能产生三个不同的结果:

| obsolete | instock | saleable ||----------|---------|----------|| Y        | Y       | true     || Y        | N       | false    || Y        | null    | null     || N        | Y       | true     || N        | N       | true     || N        | null    | true     || null     | Y       | true     || null     | N       | null     || null     | null    | null     |

因此,例如,如果某产品已过时,但您不知道该产品是否有库存,则您不知道该产品是否可销售。 您可以按如下所示编写此三值逻辑:

SELECT CASE           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'           WHEN NOT (obsolete = 'N' OR instock = 'Y') THEN 'false'           ELSE NULL       END AS saleable

确定了它的工作原理后,可以通过确定null的行为将三个结果转换为两个结果。 例如,这会将null视为不可销售:

SELECT CASE           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'           ELSE 'false' -- either false or null       END AS saleable

#19楼

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

#20楼

使用案例。 这样的事情。

SELECT Salable =        CASE Obsolete        WHEN 'N' THEN 1        ELSE 0    END

#21楼

SELECT   CASE       WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE'       ELSE 'FALSE'    END AS Salable,   * FROM PRODUCT

#22楼

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)添加了语句,该语句也可以在中 (由指出):

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product

#23楼

您可以在找到一些不错的示例,我认为您可以使用的语句将类似于以下内容(来自 ):

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

#24楼

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

#25楼

使用CASE语句:

SELECT CASE       WHEN (Obsolete = 'N' OR InStock = 'Y')       THEN 'Y'       ELSE 'N'END as Availableetc...

#26楼

在这种情况下,案例陈述是您的朋友,采用两种形式之一:

简单的情况:

SELECT CASE 
WHEN
THEN
WHEN
THEN
ELSE
END AS
FROM

扩展案例:

SELECT CASE WHEN 
THEN
WHEN
THEN
ELSE
END AS
FROM

您甚至可以将case语句放在order by子句中,以进行真正的排序。


#27楼

在SQL Server 2012中,您可以使用 。

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 @IncludeExtendedInformation = 1  BEGIN      SELECT A,B,C,X,Y,Z      FROM   T  ENDELSE  BEGIN      SELECT A,B,C      FROM   T  END

转载地址:http://qbdnb.baihongyu.com/

你可能感兴趣的文章
Tcp packet Receive and reOrder
查看>>
限制别人网速秘籍[局域网中敢看电影、下载我就限制你!][幻境网盾V3.7]
查看>>
扬州“撞车留条道歉”中学生感动网民
查看>>
杭州"创业哥":卖公司赚钱 身家从3万元暴涨至500万
查看>>
动态网站的搜索引擎策略
查看>>
搜索引擎的十大秘密
查看>>
HTML文档中小meta的大作用
查看>>
robots.txt和Robots META标签
查看>>
为网站的Web Robot 设计路标
查看>>
Robots Meta Tag的使用
查看>>
Robots.txt指南
查看>>
搜索引擎和网站的目录结构
查看>>
实战中文搜索引擎推广
查看>>
搜索引擎与spam
查看>>
简谈搜索引擎工作流程
查看>>
索引擎控制关系
查看>>
学习搜索的网站
查看>>
网络搜索引擎与智能代理技术
查看>>
搜索引擎的第三定律
查看>>
Install ImageMagick 5.5.7 on Debian
查看>>