首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL在case中简化case

SQL在case中简化case
EN

Stack Overflow用户
提问于 2013-09-24 19:31:01
回答 2查看 105关注 0票数 0

我得到了以下SQL代码( select语句的一部分):

代码语言:javascript
复制
Case
      When HilfsTab2.Gruppe = 'HST' And Basis.Breite_FLA = Basis.Breite Then 0
      Else Case When HilfsTab2.Gruppe = 'SA' Or HilfsTab2.Gruppe = 'HO / TB' Or
        HilfsTab2.Gruppe = 'PR' Then 0 Else Case
          When HilfsTab2.Gruppe Is Null Then -1 Else 1 End End
    End As IsHST_Fluegel

现在,我在一个包含几百万个条目的表中运行此命令。据我所知,SQL首先检查所有行的第一种情况,然后检查所有条目的第二种情况,依此类推。这需要很长时间。现在我在想,需要有一种更简单的方法来做到这一点。

我在考虑一个存储过程/自定义函数,它基本上根据条目输出-1、0或1。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2013-09-24 19:44:06

对于可能的速度改进,首先执行NULL检查,最后执行列比较,然后进行重构以删除嵌套的CASE

代码语言:javascript
复制
CASE WHEN HilfsTab2.Gruppe IS NULL
     THEN -1
     WHEN HilfsTab2.Gruppe IN ('SA', 'HO / TB', 'PR')
       OR (HilfsTab2.Gruppe = 'HST' AND Basis.Breite_FLA = Basis.Breite)
     THEN 0
     ELSE 1
END AS IsHST_Fluegel
票数 1
EN

Stack Overflow用户

发布于 2013-09-24 19:38:06

你的案例可以简化为:

代码语言:javascript
复制
Case
      When HilfsTab2.Gruppe = 'HST' And Basis.Breite_FLA = Basis.Breite Then 0
      When HilfsTab2.Gruppe in ('SA', 'HO / TB', 'PR') Then 0
      When HilfsTab2.Gruppe Is Null Then -1
      Else 1
End As IsHST_Fluegel

但这不会加快您的查询速度。如果您想要选择数百万行,这无论如何都需要时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18980419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档