我正在迁移系统,我发现了一个具有以下结构的存储过程:
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
我做了一些证明,两个查询都得到了相同的结果。我不知道这种变化是否合适,以及为什么会这样做。
我希望在更改之前确定。
答案 0 :(得分:0)
查询是等效的。你的更好。原件可能是自动生成的。