我有一个脚本从更大的表中提取某些数据,其中一个字段特别是定期更改,例如
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桌"?(不使用动态SQL,这会让事情难以处理?)或者另一种解决方案,那仍然相当快速?
编辑:这是否是一个很好的理由,我试图实现的想法是没有三个基本相同的查询,只有表格不同 - 每当对逻辑进行更改时,必须进行相同的编辑.这就是为什么我到目前为止避免了"让国旗完全分开"的原因......
我认为您需要@Flag
完全退出查询,并使用它来决定运行三个单独的SELECT语句中的哪一个.