我需要优化一个长case表达式:
update tf
SET class
case
WHEN tf.column = 'a' THEN (select top 1 from lookup_tbl1 where code = 1)
WHEN tf.column = 'b' THEN (select top 1 from lookup_tbl1 where code = 2)
WHEN tf.column = 'c' THEN (select top 1 from lookup_tbl1 where code = 3)
WHEN tf.column = 'd' THEN (select top 1 from lookup_tbl1 where code = 80)
end
SET name
case
WHEN tf.column2 = 'ryan' THEN (select top 1 from lookup_tbl2 where code = 12)
WHEN tf.column2 = 'david' THEN (select top 1 from lookup_tbl2 where code = 22)
WHEN tf.column2 = 'tan' THEN (select top 1 from lookup_tbl2 where code = 32)
WHEN tf.column2 = 'drake' THEN (select top 1 from lookup_tbl2 where code = 802)
end
SET department
case
WHEN tf.column3 like 'd.d%' then 'Director D'
WHEN tf.column3 like '%AC' then 'Accounting'
end
FROM trans_tbl tf WHERE flag is null
我在清理table。我需要用实际名称替换缩写,并修复该表中的数据。有没有别的办法或者更好的办法?
2条答案
按热度按时间oprakyz71#
请注意我的示例数据、解决方案和注解:
结果(之前):
结果(之后):
如果您了解apply的工作原理,那么这段代码非常干净,并且易于维护。
注意我使用的索引。生成的执行计划将是所有查找和嵌套循环联接,这是对于这样的查询(使用标准的、常规的方法)所能获得的最佳结果
xa9qqrwz2#
对于每个记录,一个完整的select将启动它(因此,如果在update表中有1000条记录,您将执行其他1000条select)。优化这个查询的一个简单方法是将select保存到变量中。
希望这对你有帮助