【发布时间】:2008-10-30 04:12:54
【问题描述】:
我有一个脚本可以从一个更大的表中提取某些数据,其中一个字段会定期变化,例如
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,这会让事情变得难以处理?)或者替代解决方案,这仍然相当快?
编辑:无论这是否是一个很好的理由,我试图实现的想法是不要有三个基本相同的查询,它们仅在表上有所不同 - 然后每当对逻辑。这就是为什么到目前为止我一直避免“让标志完全分开”的事情......
【问题讨论】:
-
您在尝试将其整合到一个查询中所花费的精力最好花在完成工作上。
标签: sql sql-server sql-server-2005 tsql