我有一条我没有写的SQL语句,我正在努力解决它。
CASE
WHEN (1 = 1) THEN A.AMT
WHEN (A.ACC_NO = '1') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '2') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '3') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '4') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '5') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '6') THEN A.AMT - 100000000
ELSE A.FACE_AMT
END AS TRUE_AMT,
有人可以解释一下(1 = 1)在做什么吗?
通过在线研究,我的解释是1 = 1表示始终为真,那么这意味着case语句将始终返回amt字段?
但是这似乎没有意义,因为这意味着没有其他条件可以满足?
答案 0 :(得分:2)
它始终是占位符(通常用于调试/测试):
CASE
WHEN (1 = 1) THEN A.AMT
WHEN (A.ACC_NO = '1') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '2') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '3') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '4') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '5') THEN A.AMT - 100000000
WHEN (A.ACC_NO = '6') THEN A.AMT - 100000000
ELSE A.FACE_AMT
END AS TRUE_AMT,
-- entire case is the same as:
A.AMT AS TRUE_AMT
答案 1 :(得分:2)
您将不得不询问编写代码的人。正如您正确指出的那样,该代码阻止了以后的条件生效。
我可能会推测有人正在编写代码,而您在开发过程中正在查看快照。或者,他们从完整的case
表达式中更改了它,并希望在删除更详细的表达式之前测试代码。