我有一个脚本可以从更大的表中提取某些数据,其中一个字段尤其会定期更改,例如
SELECT CASE @Flag WHEN 1 THEN t.field1 WHEN 2 THEN t.field2 WHEN 3 THEN t.field3 END as field, ...[A bunch of other fields] FROM table t 但是,问题是我现在想对数据进行其他处理。我正在尝试找出最有效的方法。我需要某种方式来使标志通过,所以我知道我在说的是按正确字段分割的数据。
我正在尝试的一种可能的解决方案(主要是看会发生什么)是将脚本的内容转储到具有传递给其标志的表函数中,然后对函数的结果使用SELECT查询。我设法使其正常工作,但比...慢得多。
一个明显的解决方案,并且可能是最有效地利用处理器周期:创建一系列缓存表,每个缓存表用于三个标志值。但是,问题是找到某种方法从正确的高速缓存表中提取数据以执行计算。明显的(尽管不正确的)响应类似于
SELECT CASE @Flag WHEN 1 THEN table1.field WHEN 2 THEN table2.field WHEN 3 THEN table3.field END as field, ...[The various calculated fields] FROM table1, table2, table3 不幸的是,很明显,这会产生大量的交叉连接-这根本不是我想要的结果。
有谁知道如何将交叉联接变成“仅查看x表”?(不使用Dynamic SQL,这会使事情变得很难处理吗?)还是一种替代解决方案,它仍然相当快?
编辑:无论是好的理由,我试图实现的想法都是不具有三个很大程度上相同的查询,这些查询仅因表而异-每当对逻辑进行更改时,都必须对其进行相同的编辑。这就是为什么到目前为止我避免使用“将标志完全分开”的原因。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。