2012-08-14 56 views
0

我有一個子查詢和case語句案例語句的性能(是否有可能從另外一個內引用另一個case語句?)

我在同一個查詢的兩個案例說明問題:

  • 其中一個子查詢用於確定列是否匹配。
  • 我希望對方檢查是否匹配[其他檢查],然後標記一個值。
  • 但是,t-SQL不會讓我在我的第二個case語句中引用我的第一個字段(由case語句生成)。
  • 這迫使我的子查詢添加到我的第二個case語句,並廢除第一個case語句
  • 當我這樣做,我的查詢13秒鐘後需要2.5分鐘
  • 當我從完全消除子查詢我的查詢,它需要8秒運行

問題1:能case語句生成的場在同一查詢後續的case語句引用?

問題2:爲什麼我的查詢需要只有5秒的時間,當我在一個孤立的事件聲明的子查詢,但2分鐘的時間時查詢是在具有其他4-5檢查case語句?

1種情況的聲明

CASE WHEN (SELECT xxx.xxx from xxx) THEN 'Y' 
    END AS "Match_Ind", 

第二種情況聲明

CASE WHEN condition 1 = true THEN 'cond1' 
    WHEN condition 2 = true THEN 'cond2' 
    WHEN Match_Ind = 'Y' THEN 'matched' 
    END AS "Match Detail" 
+1

您可以發佈你的完整查詢?你可能甚至不需要'CASE'語句中的'SELECT'。 – Taryn 2012-08-14 20:49:10

回答

0

你應該考慮發佈完整的查詢,但如果你要引用的第一CASE另一CASE聲明內的結果,那麼您可以在一個類似的SELECT包裝它:

+0

感謝您的快速響應!將子查詢放在FROM子句中的確有竅門。 – user1582928 2012-08-14 21:12:11

0

您是否嘗試過的線沿線的東西:

select case Bar1 ... end as Bar2, ... 
    from (select case Foo1 ... end as Bar1, ... from ...) 

它可以是JOIN根據需要與其他表編輯。

相關問題