KASUS PostgreSQL… AKHIR dengan berbagai kondisi

97

Berikut ini ekstrak tabel saya:

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

Saya ingin mengisi kolom PVC menggunakan a SELECT CASEseperti di bawah ini:

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 ;

Hasilnya adalah konten yang sama dengan tabel sumber, tidak ada yang terjadi dan saya tidak mendapatkan pesan kesalahan di file pg_log. Ini mungkin kesalahan sintaks, atau masalah dengan menggunakan beberapa kondisi dalam klausa WHEN?

Terima kasih atas bantuan dan sarannya!

wiltomap
sumber
Dapatkah Anda menampilkan nilai NULL di mana nilainya null (sehingga kita dapat melihat perbedaan antara NULL dan string kosong)? Seperti, string yang berisi NULLmisalnya
Paco
2
Anda juga memiliki masalah dengan tanda kurung. Mengapa ada tanda kurung tutup setelah 1980? (di kedua tempat)
Paco

Jawaban:

156

Kode semacam ini mungkin cocok untuk Anda

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)
Soni Harriz
sumber
2
Hampir sempurna ;-)! Saya hanya akan mengganti ELSE '00'dengan ELSE pvcsehingga saya dapat menyimpan nilai yang ada di pvckolom, jika tidak mereka akan tergores dengan '00' (case pvc IS NOT NULL). Terima kasih banyak!
wiltomap
Bisakah saya melewati ELSE?
Zon
ELSE adalah opsional. Tanpa ELSE, ekspresi akan mengembalikan NULL jika tidak ada dari sepuluh klausa WHEN yang cocok.
Klaws