SQL Server CASE语句

时间:2018-02-14 17:04:30

标签: sql-server case

Curr是指当前的政策记录,previous是指之前的政策记录。

我正试图找出使用IS NOT NULL的方法

  • '更新相同图层' - 当前和之前匹配的限制;附件匹配;
  • '更新不同图层' - 当限制不匹配或附件不匹配时;
  • '更新未知' - 休息一切;如果Attachment具有NULL值,那么它仍然属于此类

更新同一层工作正常。但对于少数帐户,前一个或当前的AttachmentUSD为NULL,我希望它们转到“更​​新未知”类别而不是“更新不同图层”

CASE 
   WHEN curr.LimitUSD = previous.LimitUSD 
    AND curr.AttachmentUSD = previous.AttachmentUSD
   THEN 'Renewed Same Layer'
   WHEN curr.LimitUSD <> previous.LimitUSD
     OR curr.AttachmentUSD <> previous.AttachmentUSD
   THEN 'Renewed Different Layer' 
   ELSE 'Renewed Unknown' 
END AS 'Renewal Layer',

2 个答案:

答案 0 :(得分:1)

我认为这是你所期望的:

case when curr.LimitUSD = previous.LimitUSD and curr.AttachmentUSD = previous.AttachmentUSD then 'Renewed Same Layer' 
when (curr.LimitUSD <> previous.LimitUSD OR curr.AttachmentUSD <> previous.AttachmentUSD) AND curr.LimitUSD IS NOT NULL then 'Renewed Different Layer' 
else 'Renewed Unknown' 
end as 'Renewal Layer',

目前,当您有查询时,将永远不会达到else,因为第一个条件恰好与第二个条件相反

答案 1 :(得分:-1)

这是一个很高的级别,因为你正在寻找使用IS NOT NULL的地方。

使用IS NOT NULL,因为NULL不是SQL Server中的值。它是未知的,因此无法使用等式检查进行比较。这是IS NOT NULL / IS NULL的来源。它不等于0,false或空白/空格。

Dim gen1 as Date
gen1 = CVDate("1/1/" & Year(Date))