2015-01-06 6 views
30

यहाँ के साथ समाप्त मेरी मेज के एक उद्धरण है:PostgreSQL मामला ... ऐसी अनेक शर्तों

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 ; 

परिणाम है:

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

मैं एक SELECT CASE के रूप में bellow का उपयोग कर पीवीसी कॉलम भरने के लिए चाहते हैं स्रोत तालिका के समान सामग्री, कुछ भी नहीं हुआ है और मुझे pg_log फ़ाइलों में कोई त्रुटि संदेश नहीं मिला है। यह एक वाक्यविन्यास त्रुटि हो सकती है, या WHEN खंडों के भीतर कई स्थितियों का उपयोग करने में समस्या हो सकती है?

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

+0

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

+2

आपको ब्रैकेट के साथ भी कोई समस्या है। 1 9 80 के बाद एक बंद ब्रैकेट क्यों है? (दोनों जगहों पर) – Paco

उत्तर

56

कोड इस प्रकार का शायद के लिए आप

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) 
+1

लगभग सही ;-)! मैं 'ELSE '00'' को' ईएलएसई पीवीसी 'के साथ बदल दूंगा ताकि मैं मौजूदा मानों को' पीवीसी' कॉलम में रख सकूं, अन्यथा वे '00' के साथ खरोंच कर रहे हैं (केस' पीवीसी न्यूल नहीं है)। आपका बहुत बहुत धन्यवाद! – wiltomap

संबंधित मुद्दे