SQL 之 基于列的逻辑

关键字: CASE, WHEN, THEN, ELSE, END

重点:CASE表达式

SQLCASE表达式,在SELECT语句中针对单个的表达式应用IF-THEN-ELSE类型的逻辑。

1. IF-THEN-ELSE逻辑

IF some condition is true

THEN do this

ELSE do that

 

CASE表达式能够出现在SELECT语句很多地方,先看紧跟在SELECT之后的Columnlist的这种情况。

SELECT

column1,

column2,

CaseExpression

FROM table

 

 

CASE表达式有两种一般格式:简单格式和查询格式

 

2. 简单格式

SELECT

CASE CaseExpression

WHEN Value1 THEN result1

WHEN Value1 THEN result1

(Repeat WHEN-THEN any number of times)

[ELSE DefaultResult]

END

 

[]代表可选,说明ELSE也不是必须的。但是每个CASE表达式中包含关键字ELSE已明确声明一个默认值是一个好的习惯。

 

示例:

ProductID CategoryCode ProductDescription

------------------------------------------------------------------------------

1                         F                        Apple

2                         F                         Orange

3                         S                         Mustand

4                         V                         Corrot

 

SELECT

CASE CategoryCode      

WHEN F THEN Fruit

WHEN V THEN Vegetable

ElSE Other

END As Category,

ProductDescription AS Description

FROM Products

 

CASE关键字作用在CategoryID列上:如果该列是F则显示Fruit...ELSE行提供了一个默认值。END结束了CASE语句,并且还包含了一个关键字AS为这个CASE表达式的结果提供了一个列的别名,意思就是这一结果列的值是默认值。

 

结果:

Category      Description

---------------------------

Fruit              Apple

Fruit             Orange

Other            Mustand

Vegetable   Corrot

 

可见,CASE表达式对于把不好理解的值转换成有意义的描述是很有用的。

 

 

3. 查询格式

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

(Repeat WHEN-THEN any number of times)

[ELSE DefaultResult]

END

 

以本例写出等价的查询格式的表达式:

SELECT

CASE      

WHEN CategoryCode F THEN Fruit

WHEN CategoryCode V THEN Vegetable

ElSE Other

END As Category,

ProductDescription AS Description

FROM Products

 

对比简单格式,简单格式是把待计算的量放在了CASE关键字之后,WHEN后边的表达式是一个简单的直接量(逻辑就是如果CASE后面的计算量等于WHEN后面的直接量,那么CASE后面的计算量=THEN后面的直接量)。查询格式中待计算的量并不是放在关键字CASE后面的,这种格式允许在WHEN后面放置较为复杂的条件表达式

如果是这样的表

ProductID     Fruit     Vegetable    Spice     ProductDescription

------------------------------------------------------------------------------

1                     X                                                   Apple

2                     X                                                   Orange

3                                                           X             Mustand

4                                       X                                 Carrot

 

SELECT

CASE

WHEN Fruit X THEN Fruit

WHEN Vegetable X THEN Vegetable

ELSE Other

END AS Category,

ProductDescription AS Description

FROM Products

 

结果:

Category      Description

-------------------------------

Fruit                   Apple

Fruit                  Orange

Other                Mustand

Vegetable        Corrot

 

PS:因为原来的表使用了三个列来表示产品是水果、蔬菜还是香料,那么需要查询格式的CASE子句,以实现逻辑。简单格式只是对单个的列进行分析。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值