SELECT
*
FROM
jsyd_zzbpclxx
WHERE
isvalid = 1
AND SBSJ >= to_date( '2021-01-01', 'yyyy-MM-dd' )
AND SBSJ <= to_date( '2021-12-31', 'yyyy-MM-dd' )
AND
decode( ssxzqdm, '320202', '320213', '320203', '320213', '320204', '320213', ssxzqdm ) = '320200'
ORDER BY
PZSJ DESC
这句decode函数的作用是什么?
相当于case语句,
把ssxzqdm字段的值320202,320203,320204,换为320213,其他情况默认ssxzqdm的值
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
上面的是用法。
然后针对着你句话来解释一下
decode( ssxzqdm, '320202', '320213', '320203', '320213', '320204', '320213', ssxzqdm ) = '320200'
你这里是判断ssxzqdm这个字段如果等于320202,则就直接返回320213;(拿第一个值跟第二个值比较,相等则取第三个值,不相等接着判断)
因为上面的结果不相等,所以又拿ssxzqdm跟320203判断,相等则返回320213,不相等再往下判断。(拿第一个值跟第四个值比较,相等则取第五个值,不相等接着判断)
因为上面的结果不相等,所以又拿ssxzqdm跟320204判断,相等则返回320213,不相等就取默认值,最后那个ssxzqdm就是默认值。
这是最终的decode得到的值,然后拿着这个值跟最后面的320200进行判断(这里就回到了你的where语句中了)