2011-11-26 10 views
5

मुझे निम्नलिखित संदर्भ डेटा मिला है।एसक्यूएल चयन; स्ट्रिंग्स को जोड़ना, डबल कॉमा से परहेज करना जहां कॉलम शून्य हैं?

PERSON_NAME     STREET     TOWN    COUNTY   POSTCODE 
------------------------------ ------------------------ ---------------- ---------------- ---------- 
David Smith     30 Johnson Street  Norwich   Norfolk   NA38 3KL 
John Brown      Douglas Road    Cambridge       C8 9IJ  
Jackie White     8 High Street   Ipswich   Suffolk   IP7 2YT 
Andrea Blue     9 Marlborough Ave  Bury    Suffolk   IP4 0XC 
Jemima Green     Riverside Walk   Colchester  Essex   CO6 7PR 
James Gray      167 Hadleigh Place  London       SW1 4TU 

मुझे क्या करना चाहते हैं, तो व्यक्ति नामों की सूची प्रदर्शित करने के लिए, साथ साथ उनके पते एक अल्पविराम से अलग स्ट्रिंग में concatenated है।

यह हिस्सा आसान है, मैंने || को कॉलम कॉलम और कॉमा सेपरेटर्स रखने के लिए उपयोग किया है।

जिस भाग में मैं सवाल कर रहा हूं, यह तथ्य है कि कुछ पंक्तियों में COUNTY के लिए कुछ भी सूचीबद्ध नहीं है, इसलिए मुझे , , प्रदर्शित करने से बचने की आवश्यकता है।

मैंने अपने लिए कुछ शोध किया है, और डबल कॉमा को बदलने के लिए ओरेकल में SUBSTR का उपयोग करने का निर्णय लिया है, हालांकि यह थोड़ा "गंदे" महसूस करता है। जटिल कार्यों (जैसे this previous SO question) के उपयोग से परहेज करने के लिए ऐसा करने का एक क्लीनर तरीका है?

SELECT 
    SUPPNAME as "Supplier Name", 
    REPLACE(STREET || ', ' || TOWN || ', ' || COUNTY || ', ' || POSTCODE, ' ,','') as "Supplier Address" 
FROM 
    SUPPLIERS 
; 

धन्यवाद

उत्तर

7

SELECT 
SUPPNAME AS "Supplier Name", 
(
CASE WHEN STREET IS NULL THEN '' ELSE STREET || ', ' END || 
CASE WHEN TOWN IS NULL THEN '' ELSE TOWN || ', ' END || 
CASE WHEN COUNTY IS NULL THEN '' ELSE COUNTY || ', ' END || 
CASE WHEN POSTCODE IS NULL THEN '' ELSE POSTCODE END 
) AS "Supplier Address" 
FROM SUPPLIERS 
+2

मैं अपने उत्तर हटा दिया गया क्योंकि मैंने पाया की शुरुआत में ',' एक अतिरिक्त दूर करने के लिए इस तरीके का प्रयास है कि (के रूप में मेरा मानना ​​है कि यह SQL सर्वर में करता है) NULLs एक अशक्त उपज नहीं है साथ ओरेकल स्ट्रिंग concats में, जैसा आपने बताया है। मैंने केस स्टेटमेंट पर स्विच करना शुरू किया, लेकिन फिर आपका जवाब देखा - +1 –

+0

+1। @ याहिया - तुमने मुझे एक बड़ा सिरदर्द बचाया। धन्यवाद! –

2

आप क्षेत्रों है कि रिक्त हो सकता है चारों ओर NVL2 इस्तेमाल कर सकते हैं की कोशिश, somthing तरह NVL2(county, county || ',', '')

3

में:

यह है कि मैं क्या है पिछले उत्तर अगर सभी फाइल्ड्स नल हैं तो आपको केवल बेवकूफ मिलेगा, ' इसके बजाय न्यूल की उम्मीद है। परिणाम

SELECT 
SUPPNAME AS "Supplier Name", 
SUBSTR(
    NVL2(STREET, ', ' || STREET, NULL) 
     || NVL2(TOWN, ', ' || TOWN, NULL) 
     || NVL2(COUNTY, ', ' || COUNTY, NULL) 
     || NVL2(POSTCODE, ', ' || POSTCODE, NULL) 
    ,2) AS "Supplier Address" 
FROM SUPPLIERS 
+0

यह मेरे लिए पूरी तरह से काम करता है और मैंने पिछली कॉमा से परहेज किया। – user2710915

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