最新消息:

t-sql的楼梯:逾越基本级别6:应用案例表达式和

影视 admin 浏览

  CASE表达式有两种分歧的格局:复杂和搜刮。这两种类型的格局稍有分歧,如图1所示。

  Simple CASE expression:

  CASE input_expression

  WHEN when_expression THEN result_expression [ ...n ]

  [ ELSE else_result_expression ]

  END

  Searched CASE expression:

  CASE

  WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ]

  END

  图1:案例表达式语法

  经过检查图1中的CASE表达式的两种分歧格局,您可以看到每种格局若何供给一种分歧的方法来标识一个肯定案例表达式结果的多个表达式。关于这两种状况,每个子句都履行一个布尔测试。在复杂的CASE表达式中,布尔测试的左手边出现在CASE单词以后,被称为“input表达式”,而布尔测试的左边则是在单词前面,被称为“表达式”的时分。关于复杂的CASE表达式,“input表达式”和“表达式”之间的运算符一直是相等的运算符。而关于搜刮的CASE表达式,每个子句将包罗一个“布尔表达式”。这个“布尔表达式”可所以一个复杂的布尔表达式,它可所以一个运算符,也可所以一个具有很多分歧条件的复杂布尔表达式。另外,搜刮的CASE表达式可以应用全部的布尔运算符。

  不论应用哪一种CASE格局,每个子句都依照它出现的依次停止比拟。CASE表达式的结果将基于第一个计算为TRUE的子句。假设no当子句的值为TRUE时,则前去ELSE表达式。当ELSE子句被省略,当子句的值为TRUE时,然后前去NULL值。

  样本数据的例子

  为了应用案例表达式演示一个表,我将应用清单1中的脚本创立一个名为MyOrder的示例表。假设您宁愿追随我的示例,并在SQL Server实例上运转它们,那么可以在您选择的数据库中创立这个表。

  CREATE TABLE MyOrder (

  ID int identity,

  OrderDT date,

  OrderAmt decimal(10,2),

  Layaway char(1));

  INSERT into MyOrder VALUES

  ('12-11-2012', 10.59,NULL),

  ('10-11-2012', 200.45,'Y'),

  ('02-17-2014', 8.65,NULL),

  ('01-01-2014', 75.38,NULL),

  ('07-10-2013', 123.54,NULL),

  ('08-23-2009', 99.99,NULL),

  ('10-08-2013', 350.17,'N'),

  ('04-05-2010', 180.76,NULL),

  ('03-27-2011', 1.49, NULL);

  清单1:创立示例表MyOrder

  应用一个复杂的案例表达式来表现甚么时候和其他表达式

  为了演示复杂的CASE表达式格局若何任务,让我运转清单2中的代码。

  SELECT YEAR(OrderDT) AS OrderYear,

  CASE YEAR(OrderDT)

  WHEN 2014 THEN 'Year 1'

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论