情况下的重叠条件

时间:2015-02-26 10:41:28

标签: postgresql postgresql-9.1

我有以下查询:

SELECT case     
 when tbl.id % 2 = 0 then 'mod-2'
 when tbl.id % 3 = 0 then 'mod-3'
 when tbl.id % 5 = 0 then 'mod-5'
 else 'mod-x'
 end as odds, tbl.id from some_xyz_table tbl;

如果表格为Id 5,6,7,那么它将输出为(从pg-admin复制):

"mod-5";5
"mod-2";6
"mod-x";7

但是,在这里我可以看到6可以被23整除。我的预期输出是:

"mod-5";5
"mod-2";6
"mod-3";6   <-- this
"mod-x";7

有没有办法修改此查询以获得此类输出?任何替代解决方案都适合我。

1 个答案:

答案 0 :(得分:0)

您可以使用UNION查询执行此操作[编辑将其更改为使用UNION ALL]:

SELECT 'mod-5', id FROM tbl -- divisible by 5
WHERE id %5 = 0
UNION ALL
SELECT 'mod-2', id FROM tbl -- divisible by 2
WHERE id %2 = 0
UNION ALL
SELECT 'mod-3', id FROM tbl -- divisible by 3
WHERE id %3 = 0
UNION ALL
SELECT 'mod-x',id FROM tbl  -- not divisible by 5,3 or 2
WHERE id %5 <> 0 AND id%2 <> 0 AND id % 3 <> 0