如何在PostgreSQL中的WHERE子句中有一个CASE WHEN?
我不想扫描一个表的所有分区。根据变量,我只想扫描一个特定的分区。
SELECT
t.CUSTOMER_ID
, CASE
WHEN t.col1 = 'U' THEN 1
WHEN t.col1 = 'E' THEN 2
WHEN t.col1 = 'J' THEN 3
ELSE 0 END AS col1_id
, max(t.date) AS date
FROM t
WHERE
date > CAST('${date}' AS TIMESTAMP)
AND st = 'Y'
and RSS = 'wallet'
and cob NOT IN (1,2,3,4,5)
AND CASE
WHEN ${mp_id} IN (1,2,3) THEN col1 = 'U' --this CASE WHEN is not working
WHEN ${mp_id} IN (4,5,6) THEN col1 = 'E'
WHEN ${mp_id} IN (7,8,9) THEN col1 = 'J'
END
字符串
如果变量${mp_id}在(1,2,3)中,我只扫描分区'U';如果变量${mp_id}在(4,5,6)中,我只扫描分区'E'。
在WHERE子句中,CASE WHEN的正确语法是什么?
谢谢你,谢谢
2条答案
按热度按时间mbyulnm01#
像这样做:
字符串
记住,
CASE
关键字是用于表达式的。它产生一个值;它不像if
语句那样选择运行哪段代码。我知道这个编辑现在已经很老了,但是它刚刚又出现在我的提要中,所以人们仍然可以看到它,今天我会用
JOIN
到aVALUES()
expression来做这件事(它们不仅仅是针对INSERT
语句!)型
kqqjbcuj2#
通常在
WHERE
子句中使用常规AND
/OR
而不是case
expressions 会更好。字符串