这两个查询之间有区别吗?情况那么

时间:2017-10-31 18:39:34

标签: sql sql-server

我正在迁移系统,我发现了一个具有以下结构的存储过程:

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

我做了一些证明,两个查询都得到了相同的结果。我不知道这种变化是否合适,以及为什么会这样做。

我希望在更改之前确定。

1 个答案:

答案 0 :(得分:0)

查询是等效的。你的更好。原件可能是自动生成的。