我有一个脚本可以从更大的表格中提取某些数据,特别是一个字段会定期变化,例如,根据标志通过SQL从不同的表格中选择
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,这使得事情很难处理?)或者一个替代解决方案,这仍然是相当迅速?
编辑:无论这是一个很好的理由,我试图实现的想法是没有三个大部分相同的查询,只有不同的表 - 这将不得不被编辑相同,每当改变逻辑。这就是为什么我避免了“有标志完全分离”的事情到目前为止......
您花费在尝试将其作为一个查询的努力将花在完成工作上。 – 2008-10-30 16:08:56