SQL Server:长CASE语句的替代方法

天使蛋糕

我有一个很长的CASE语句,这会使查询很长。还有其他方法吗?CASE声明会影响绩效吗?我看到有人在推荐,COALESCE但是我不确定这是否是我查询中的好选择。

下面的示例a,b,c,d,e,f是表中的列,但我仅在此处使用字母作为示例。

UPDATE table
SET totalAmt = CASE   
                 WHEN product_id = 1  THEN a*b*c*d
                 WHEN product_id = 2  THEN c*d*e + 1
                 WHEN product_id = 3  
                   THEN 
                     CASE WHEN term = 12 THEN b*c*d*e ELSE a*b*e*f END
                 WHEN product_id = 4   THEN a+b+c+d
                 etc.....
               END
FROM table
保罗·威廉姆斯

我不希望CASE语句本身有任何性能问题由于您的一个查询正在对数据进行一次传递,因此对于每个产品ID,它的性能可能比多次查询要好得多。

使用WHERE子句,查询可能会更好地执行-如果您的长查询甚至可以做到这一点。

如果该表很大,并且按产品ID进行索引,并且该查询正在更新一小部分产品,则可能会获得更好的性能,将UPDATE每个产品ID的查询分为几个单独的查询即可。否则,您可能最终会对一个巨大的表进行表扫描。例如:

UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2

如果所有情况都取决于product_id,则可以缩写如下语法:

CASE product_id
    WHEN 1 THEN a*b*c*d
    WHEN 2 THEN ...
END

我建议使用注释使代码更具可读性。例如,如果产品是一组硬编码的已知ID,则可以指定它们是什么。同样,它可能有助于将来的代码维护来解释该计算:

UPDATE table
SET totalAmt =
    CASE WHEN product_id = 1 -- table
    THEN a*b*c*d             -- some explanation of calculation
    CASE WHEN product_id = 2 -- chair
    THEN ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Sql Server 奇怪的 CASE 语句

来自分类Dev

滚动周的 SQL Server 中的 Case 语句 - 更简单的方法?

来自分类Dev

SQL函数:长CASE语句,到处都是错误

来自分类Dev

Pandas替代SQL语句

来自分类Dev

Pandas替代SQL语句

来自分类Dev

SQL Server Case语句和聚合功能

来自分类Dev

尝试在SQL Server中使用CASE语句

来自分类Dev

SQL Server:case语句中的昂贵查询

来自分类Dev

SQL Server TVP与Where / Case语句合并

来自分类Dev

嵌入在In子句中的SQL Server case语句

来自分类Dev

尝试在SQL Server中使用CASE语句

来自分类Dev

从 case 语句中添加行 - SQL Server

来自分类Dev

在 SQL Server 中使用嵌套的 CASE 语句

来自分类Dev

动态添加case语句sql server

来自分类Dev

在总和中嵌套 Case 语句 - SQL Server

来自分类Dev

在JavaScript中包装长SQL语句的便捷方法

来自分类Dev

sql case语句或if语句

来自分类Dev

SQL Server重播标识列的替代方法

来自分类Dev

SQL Server中for循环的替代方法

来自分类Dev

SQL Server 中使用 Case 语句的嵌套 If 语句

来自分类Dev

Oracle SQL:Select语句中嵌套REPLACE()的替代方法?

来自分类Dev

Oracle SQL-UNION ALL语句的替代方法

来自分类Dev

在Sql Azure上是否有Sql Server Agent的替代方法

来自分类Dev

在MS SQL Server中访问SQL Like *替代方法

来自分类Dev

在MS SQL Server中访问SQL Like *替代方法

来自分类Dev

大于SQL CASE语句

来自分类Dev

SQL Case语句(理解)

来自分类Dev

SQL中的case语句?

来自分类Dev

SQL嵌套CASE语句