开发者社区 问答 正文

通过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表”?(不使用Dynamic SQL,这会使事情变得很难处理吗?)还是一种替代解决方案,它仍然相当快?

编辑:无论是好的理由,我试图实现的想法都是不具有三个很大程度上相同的查询,这些查询仅因表而异-每当对逻辑进行更改时,都必须对其进行相同的编辑。这就是为什么到目前为止我避免使用“将标志完全分开”的原因。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 17:51:07 441 分享 版权
1 条回答
写回答
取消 提交回答
  • 我认为您需要@Flag完全退出查询,并使用它来确定要运行三个单独的SELECT语句中的哪一个。

    2019-11-18 17:51:14
    赞同 展开评论
问答分类:
问答标签:
问答地址: