PostgreSQL CASE ... कई शर्तों के साथ END


97

यहाँ मेरी तालिका का एक उद्धरण है:

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

मैं पीवीसी कॉलम 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 ;

परिणाम स्रोत तालिका के समान सामग्री है, कुछ भी नहीं हुआ है और मुझे pg_log फ़ाइलों में कोई त्रुटि संदेश नहीं मिला है। यह एक वाक्यविन्यास त्रुटि, या जब एक से अधिक शर्तों के साथ कोई समस्या हो सकती है?

मदद और सलाह के लिए धन्यवाद!


क्या आप एक शून्य मान प्रदर्शित कर सकते हैं जहां यह शून्य है (इसलिए हम NULL और खाली स्ट्रिंग के बीच अंतर देख सकते हैं)? जैसे, NULLउदाहरण के लिए एक स्ट्रिंग युक्त
पाको

2
आपके पास कोष्ठक के साथ एक समस्या भी है। 1980 के बाद एक समापन कोष्ठक क्यों है? (दोनों स्थानों में)
पाको

जवाबों:


156

इस तरह का कोड शायद आपके लिए काम करना चाहिए

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)। आपका बहुत बहुत धन्यवाद!
विल्टोमैप

क्या मैं ELSE छोड़ सकता हूं?
ज़ोन

ELSE वैकल्पिक है। ईएलएसई के बिना, अभिव्यक्ति NULL वापस आ जाएगी जब दस में से कोई भी मैच नहीं होगा।
क्वास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.