PostgreSQL CASE…複数の条件で終了


97

これが私のテーブルの抜粋です:

  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句内の複数の条件の使用に関する問題ですか?

ヘルプとアドバイスをありがとう!


null値がnullの場所に表示できますか(NULLと空の文字列の違いがわかるように)NULLたとえば、次を含む文字列
Paco

2
角かっこにも問題があります。なぜ1980年以降に閉じ括弧があるのですか?(両方の場所)
Paco

回答:


155

この種のコードはおそらくあなたのために働くはずです

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
ほぼ完璧です;-)!私はちょうど代わるELSE '00'ELSE pvc私は既存の値を保つことができるように、pvcそうでない場合、彼らは「00」(ケースに傷が付いている、列pvc IS NOT NULL)。どうもありがとう!
wiltomap

ELSEをスキップできますか?
Zon

ELSEはオプションです。ELSEがない場合、10個のWHEN句のいずれも一致しない場合、式はNULLを返します。
Klaws、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.