我有一個腳本可以從更大的表格中提取某些數據,特別是一個字段會定期變化,例如,根據標誌通過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