【发布时间】:2017-02-05 13:19:09
【问题描述】:
当 CL.TYPE = DIAG.TYPE 时,下面的 case 语句应该检索数据,然后 DIAG.TYPE 为真,如果不是,则为 NULL。这有意义吗?或者这是最合乎逻辑的方法吗?
(CASE
WHEN CL.TYPE2 = DIAG.TYPE
OR CL.TYPE3 = DIAG.TYPE
OR CL.TYPE4 = DIAG.TYPE
OR CL.TYPE5 = DIAG.TYPE
OR CL.TYPE6 = DIAG.TYPE
OR CL.TYPE7 = DIAG.TYPE
OR CL.TYPE8 = DIAG.TYPE THEN SUBSTRING(DIAG.TYPE,2,1)
ELSE NULL
END)
【问题讨论】:
-
但是这个查询显示有 7 个
CL.TYPE列。所以这就是它使用CASE表达式的原因 -
该查询是有道理的,但它突出了您的表设计中的一些问题。你有所谓的重复组,它违反了 1NF。考虑一下如果你需要添加一个 Type9 会有多痛苦。您将不得不更改您的表以及触及它的每个查询。如果这被正确规范化,您将无需更改任何内容。
-
如果这些是索赔诊断类型,请查看您是否可以让您的管理员为您规范列。
标签: sql sql-server sql-server-2012 case case-statement