Oto fragment mojej tabeli:
gid | datepose | pvc
---------+----------------+------------
1 | 1961 | 01
2 | 1949 |
3 | 1990 | 02
1 | 1981 |
1 | | 03
1 | |
Chcę wypełnić kolumnę PVC za pomocą SELECT CASE
poniższego:
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 ;
Rezultatem jest ta sama zawartość co tabela źródłowa, nic się nie stało i nie otrzymuję komunikatu o błędzie w plikach pg_log. Może to być błąd składni lub problem z użyciem wielu warunków w klauzulach WHEN?
Dzięki za pomoc i radę!
postgresql
case
wiltomap
źródło
źródło
NULL
na przykładOdpowiedzi:
Ten rodzaj kodu powinien być prawdopodobnie odpowiedni dla Ciebie
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)
źródło
ELSE '00'
sięELSE pvc
tak, że można zachować istniejące wartości wpvc
kolumnie, w przeciwnym razie są one porysowane z „00” (casepvc IS NOT NULL
). Wielkie dzięki!