以下是我的表格摘录:

  gid    |    datepose    |    pvc
---------+----------------+------------
 1       |  1961          | 01
 2       |  1949          |
 3       |  1990          | 02
 1       |  1981          |
 1       |                | 03
 1       |                |

我想用SELECT CASE填充PVC柱,如下所示:

SELECT

 gid,

 CASE
  WHEN (pvc IS NULL OR pvc = '') AND datpose < 1980) THEN '01'
  WHEN (pvc IS NULL OR pvc = '') AND datpose >= 1980) THEN '02'
  WHEN (pvc IS NULL OR pvc = '') AND (datpose IS NULL OR datpose = 0) THEN '03'
 END AS pvc

FROM my_table ;

结果与源表的内容相同,没有发生任何事情,并且在pg_日志(log)文件中没有收到错误消息.这可能是语法错误,或者是在WHEN子句中使用多个条件的问题?

谢谢你的帮助和建议!

推荐答案

这种代码可能适合您

SELECT
 *,
 CASE
  WHEN (pvc IS NULL OR pvc = '') AND (datepose < 1980) THEN '01'
  WHEN (pvc IS NULL OR pvc = '') AND (datepose >= 1980) THEN '02'
  WHEN (pvc IS NULL OR pvc = '') AND (datepose IS NULL OR datepose = 0) THEN '03'
  ELSE '00'
 END AS modifiedpvc
FROM my_table;


 gid | datepose | pvc | modifiedpvc 
-----+----------+-----+-------------
   1 |     1961 | 01  | 00
   2 |     1949 |     | 01
   3 |     1990 | 02  | 00
   1 |     1981 |     | 02
   1 |          | 03  | 00
   1 |          |     | 03
(6 rows)

Postgresql相关问答推荐

如何将Postgs SUM结果存储在多个变量中?

用于JSON数组的带有组合条件的Postgres JSONB Select 查询

Select 所有数组类型和维度

有没有一种方法可以在参数中添加密码,并在批处理文件中需要时自动获取密码?

单个WAL文件中的操作会影响哪些表和多少行

Postgres从spark触发post-write

Postgres 查询指向国外数据工作者的分区表比直接查询 fdw 慢很多倍

如何从元组列表中 Select 与多列匹配的行?

LAG 函数和 GROUP BY

如何防止用户看到其他数据库和其他数据库中的表?

如何确定 NULL 是否包含在 Postgres 的数组中?

Postgres UPDATE with ORDER BY,怎么做?

错误:must be owner of language plpgsql

将主键更改为自动递增

PostgreSQL 获取过go 12 小时的元素

使用枚举与布尔值?

如何为 Postgres psql 设置时区?

PGAdmin 编辑数据

如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

如何在 JPA 中使用 Postgres JSONB 数据类型?