PostgreSQL CASE… END birden çok koşulla


104

İşte tablomun bir özeti:

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

PVC kolonunu bir SELECT CASE :

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 ;

Sonuç, kaynak tablo ile aynı içerik, hiçbir şey olmadı ve pg_log dosyalarında hata mesajı almıyorum. Bir sözdizimi hatası veya WHEN yan tümceleri içinde birden çok koşulun kullanılmasıyla ilgili bir sorun olabilir mi?

Yardım ve tavsiye için teşekkürler!


NULL değeri null olduğu yerde görüntüleyebilir misiniz (böylece NULL ve boş dizge arasındaki farkı görebiliriz)? Olduğu gibi, NULLörneğin içeren bir dize
Paco

2
Ayrıca parantezlerle ilgili bir sorununuz var. 1980'den sonra neden kapanış parantezi var? (her iki yerde)
Paco

Yanıtlar:


169

Bu tür bir kod belki sizin için çalışmalı

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)

2
Neredeyse mükemmel ;-)! Mevcut değerleri sütunda tutabilmek için ELSE '00'ile değiştirirdim , aksi takdirde '00' (case ) ile çizilirler . Çok teşekkürler! ELSE pvcpvcpvc IS NOT NULL
wiltomap

ELSE'yi atlayabilir miyim?
Zon

ELSE isteğe bağlıdır. ELSE olmadan, on WHEN cümlesinden hiçbiri eşleşmediğinde ifade NULL döndürür.
Klaws
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.