T-SQL中的Select查询(续1)

时间:2022-11-24 03:42:01

T-SQL中的Select查询(续1)

T-SQL中的Select查询(续)
下面来谈一下:Case表达式。
这里所说的case命令与其它语言中用到的case命令是有区别的。它不是用来对程序流程进行控制的,而是基于条件来逻辑地确定一个表达式的值。要注意:系统不会为case表达式提供列名,因此,必须记住一定要为每个case表达式提供列名。
1.      简单的Case
在简单的case中,第一个参数是要检查的表达式,接着是依次列出每个测试条件。但是,这种case的形式是有局限性的,它只能进行等值比较。Case表达式依次检查每个check条件,并返回第一个为真的when条件后的then子句中的值。如:
   SELECT CustomerTypeName,
   CASE [IsDefault]
   WHEN 1 THEN ‘default type’
   WHEN 0 THEN ‘possible’
   ELSE ‘_’
   END as AssignStatus
   FROM CustomerType
Case表达式是用end关键字和别名来结束的。在本例中,case表达式对isdefault列进行了检查,并在这个SQL select语句的结果集中生成了一个名为AssignStatus的列。
2.      布尔Case
与简单的case相比,case表达式的布尔形式更加灵活,每个case分支都具有自己的布尔表达式。所以,不仅在每个when条件中可以使用包括“=”在内的多种比较运算符,而且在比较时还可以引用其他的列:
   SELECT
   CASE
   WHEN 1<0 THEN ‘Reality is gone.’
   WHEN GetDate()=’3/06/2006’
   THEN ‘John gets his driver’’s license.’
  WHEN 1>0 THEN ‘Life is normal.’
   END AS RealityCheck
在布尔case中,如果遇到了第一个为真的when条件,就不会再继续对其他when条件进行检查了,而是直接返回这个when条件所对应的then子句的值。
布尔case表达式可以处理包含布尔and和布尔or的复杂条件。下面的例子代码就使用了一个批处理程序来创建case表达式,而且在这个case表达式中包含了andbetween运算符:
   DECLARE @b INT,@q INT
   SET @b=2006
   SET @q=22
   SELECT
CASE
WHEN @b=2006 AND @q BETWEEN 15 AND 30 THEN 1
    ELSE NULL
END AS Test