PostgreSQL CASE… ENDE mit mehreren Bedingungen


97

Hier ist ein Auszug aus meiner Tabelle:

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

Ich möchte die PVC-Säule mit einem folgenden SELECT CASEBalken füllen :

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 ;

Das Ergebnis ist der gleiche Inhalt wie in der Quelltabelle, es ist nichts passiert und ich erhalte keine Fehlermeldung in den pg_log-Dateien. Möglicherweise handelt es sich um einen Syntaxfehler oder um ein Problem bei der Verwendung mehrerer Bedingungen in WHEN-Klauseln.

Vielen Dank für Hilfe und Rat!


Können Sie einen NULL-Wert anzeigen, bei dem er null ist (damit wir den Unterschied zwischen NULL und leerer Zeichenfolge sehen können)? Wie in, eine Zeichenfolge, die NULLzum Beispiel enthält
— Paco

2
Sie haben auch ein Problem mit Klammern. Warum gibt es nach 1980 eine schließende Klammer? (an beiden Orten)
— Paco

Antworten:


155

Diese Art von Code sollte vielleicht für Sie funktionieren

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
Fast perfekt ;-)! Ich würde nur ersetzen ELSE '00'mit , ELSE pvcdamit ich die vorhandenen Werte in halten pvcSpalt, da sie sich mit ‚00‘ (Fall verkratzt pvc IS NOT NULL). Vielen Dank!
— Wiltomap

Kann ich SONST überspringen?
— Zon

Das ELSE ist optional. Ohne ELSE gibt der Ausdruck NULL zurück, wenn keine der zehn WHEN-Klauseln übereinstimmt.
— Klaws
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.