这是关于从IIF
转换为CASE
的第二个问题。
让我与IIF
混淆的是当其中一个条件成为第二个IIF
时。当IIF
代码中出现这种情况时,我无法理解是否需要将其作为另一个WHEN
,或者我需要启动嵌套CASE
。
这是需要转换的IIF
语句。
IIF(([FirstPublicationDate] IS NULL), IIF(([PublicationDate] IS NULL), GETDATE(), [PublicationDate]), [FirstPublicationDate])
感谢您的帮助。
答案 0 :(得分:2)
制作树形图:
--- GETDATE()
(null) /
/
--- PublicationDate -
(null) / \
/ \
FirstPublicationDate - --- PublicationDate
\
\
--- FirstPublicationDate
很明显,如果IIF
语句不为空,则FirstPublicationDate
语句要返回PublicationDate
;然后是GETDATE()
,最后是COALESCE
。您可以将其缩短为一个更易读的SELECT COALESCE(FirstPublicationDate, PublicationDate, GETDATE())
语句:
geom_path
答案 1 :(得分:0)
可以使用嵌套的CASE语句编写相同的IIF:
SELECT CASE WHEN [FirstPublicationDate] IS NULL THEN
CASE WHEN [PublicationDate] IS NULL THEN GETDATE() ELSE [PublicationDate] END
ELSE [FirstPublicationDate] END
答案 2 :(得分:0)
这是你的IIF的非嵌套等价物,它更加红色
SELECT CASE
WHEN FirstPublicationDate IS NOT NULL THEN FirstPublicationDate
WHEN PublicationDate IS NOT NULL THEN PublicationDate
ELSE GETDATE()
END
但是即使在大多数时候你都拥有强大而简单的选择:
SELECT COALESCE(FirstPublicationDate, PublicationDate, GETDATE())
您可以阅读coalesce here,其中包括与case
的比较