2017-10-31 9 views
1

私はシステムを移行していると私は、次のような構造を持っている店の手順が見つかりました:これら2つのクエリに違いはありますか? CASE THEN

SELECT @amount = ISNULL(SUM(amount/ 
    (CASE WHEN (Table_1.column1 > 0) THEN Table_1.column2 ELSE 
    CASE WHEN (Table_2.column1 > 0) THEN Table_2.column2 ELSE 
    CASE WHEN (Table_3.column1 > 0) THEN Table_3.column2 ELSE 
    CASE WHEN (Table_4.column1 > 0) THEN Table_4.column2 ELSE 
    CASE WHEN (Table_5.column1 > 0) THEN Table_5.column2 ELSE @tc_amount      
    END END END END END)), 0.00) 
FROM Table_1 
    LEFT OUTER JOIN Table_2 ON ... 
    LEFT OUTER JOIN ... 
WHERE Many_conditions 

私はそれを変更する:私はいくつかの証明を行い、両方のクエリを投げる

SELECT @amount = ISNULL(SUM(amount/ 
    (CASE 
     WHEN (Table_1.column1 > 0) THEN Table_1.column2 
     WHEN (Table_2.column1 > 0) THEN Table_2.column2 
     WHEN (Table_3.column1 > 0) THEN Table_3.column2 
     WHEN (Table_4.column1 > 0) THEN Table_4.column2 
     WHEN (Table_5.column1 > 0) THEN Table_5.column2 ELSE @tc_amount      
    END)), 0.00) 
FROM Table_1 
    LEFT OUTER JOIN Table_2 ON ... 
    LEFT OUTER JOIN ... 
WHERE Many_conditions 

同じ結果。私はこの変更がOKかどうか、なぜそれがそのように作られたのか分かりません。

私はそれを変更する前に確認したいと思います。

+1

これらは同じです。 –

+0

変更がOKです – Lamak

+0

Yoursがより効率的なCASEステートメントです。 – russ

答えて

0

クエリは同等です。あなたの方が良いです。オリジナルはおそらく自動生成されていました。

関連する問題