【问题标题】:Does the following Case statement make sense?下面的 Case 语句有意义吗?
【发布时间】: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


【解决方案1】:

您的查询看起来不错,您可以使用in 减少OR 的重复,以使您的查询更具可读性:

(CASE
WHEN  DIAG.TYPE in (CL.TYPE2, CL.TYPE3, CL.TYPE4, CL.TYPE5, CL.TYPE6, CL.TYPE7, CL.TYPE8)  
THEN SUBSTRING(DIAG.TYPE,2,1)
ELSE NULL
END)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2011-08-03
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多