2011-03-08 14 views
21

मेरे पास एक तालिका में एक से अधिक कॉलम में एक पता है।टी-एसक्यूएल का उपयोग करके कॉलम को सही ढंग से कैसे संयोजित करें?

SELECT FirstName, LastName, StreetAddress, City, Country, PostalCode 
FROM Client 

मैं एक अल्पविराम का उपयोग कर दायर (,) एक विभाजक के रूप में पता संबंधी कॉलम को श्रेणीबद्ध करने के लिए कोशिश कर रहा हूँ, लेकिन अगर कॉलम "जैसे। सिटी 'के किसी भी शून्य या खाली है, अल्पविराम वहाँ नहीं होना चाहिए।

टीएसक्यूएल में टर्नरी ऑपरेटर का उपयोग कैसे करें जैसे कि सी # में है? या मुझे सबसे अच्छा अभ्यास का सुझाव देते हैं?

धन्यवाद

उत्तर

36

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

Select Stuff(
    Coalesce(',' + FirstName,'') 
    + Coalesce(',' + LastName,'') 
    + Coalesce(',' + StreetAddress,'') 
    + Coalesce(',' + City,'') 
    + Coalesce(',' + Country,'') 
    + Coalesce(',' + PostalCode ,'') 
    , 1, 1, '') 
From Client 

आप केवल पता चाहते हैं, तो जाहिर है आप केवल उन स्तंभों में शामिल हैं:

Select FirstName, LastName 
    , Stuff(
     Coalesce(',' + StreetAddress,'') 
     + Coalesce(',' + City,'') 
     + Coalesce(',' + Country,'') 
     + Coalesce(',' + PostalCode ,'') 
    , 1, 1, '') 
From Client 
+1

+1, फिर कुछ सीखा:) लेकिन आपको उस से पहला/अंतिम नाम हटा देना चाहिए क्योंकि मुझे लगता है कि ओपी केवल पते को जोड़ना चाहता है। –

4

isnull

तुम भी COALESCE फंक्शन का उपयोग करके देख सकते हैं पर देखो, कृपया इसे देखने के लिए ऊपर बोल में:

पहले nonnull अभिव्यक्ति रिटर्न अपने तर्कों के बीच में।

अंत में आप एक और चीज कर सकते हैं जो एक केस फ़ंक्शन का उपयोग कर सकता है।

SELECT Address1, CASE Address2 IS NOT NULL THEN "," + Address2 ELSE... 
+1

शामिल करते हैं तो 'चयन City1 + IsNull (City2)? "": "," सिटी 2 "निश्चित रूप से मान्य TSQL मान्य नहीं है। –

+1

@ मार्टिन - क्षमा करें कि एसएसआईएस था। लेकिन बाकी वैध होना चाहिए। – JonH

1

आप Case-Expression का उपयोग कर सकते हैं।

create table #Client(
FirstName varchar(20), 
LastName varchar(50), 
StreetAddress varchar(50), 
City varchar(20), 
Country varchar(20), 
PostalCode varchar(20) 
) 
insert into #Client(FirstName,LastName,StreetAddress,City,Country,PostalCode)values('Jeff','Bridges','Street1','City1','US','12345') 
insert into #Client(FirstName,LastName,StreetAddress,City,Country,PostalCode)values('Steven','Baldwin','Street2','City2','US','12345') 
insert into #Client(FirstName,LastName,StreetAddress,City,Country,PostalCode)values('Barack','Obama','Street3',NULL,'US','12345') 
insert into #Client(FirstName,LastName,StreetAddress,City,Country,PostalCode)values('Nora','Jones','Street4','City4','US','12345') 

SELECT FirstName, LastName, 
(CASE WHEN City IS NULL AND StreetAddress IS NULL THEN '' 
     WHEN City IS Null AND StreetAddress IS NOT NULL Then StreetAddress 
     WHEN City IS NOT Null AND StreetAddress IS NOT NULL THEN StreetAddress + ',' + City END 
)AS Adress, Country, PostalCode 
FROM #Client 

drop table #Client 
+0

@ धन्यवाद। लेकिन सभी पाए गए कॉलम (स्ट्रीट एड्रेस, सिटी, कंट्री, पोस्टलकोड) जोड़ना मेरे लिए वास्तव में कठिन है .. ?? मैं इस केस स्टेटमेंट का उपयोग कैसे करूं? – User13839404

+0

@ यूज़र: [थॉमस समाधान] का उपयोग करें (http://stackoverflow.com/questions/5235391/how-to-concatenate-columns-properly-using-t-sql/5235783#5235783) –

0

एक अन्य समाधान का उपयोग है IsNull

Select FirstName, LastName 
    , ISNULL(StreetAddress+', ','') 
     +ISNULL(City+', ','') 
     +ISNULL(Country+', ','') 
     +ISNULL(PostalCode,'') 
FROM Client 

तो एक मूल्य अशक्त, तो है concatenation परिणाम शून्य हो जाएगा। ISNULL दूसरी अभिव्यक्ति के साथ पहली अभिव्यक्ति को प्रतिस्थापित करेगा।

http://msdn.microsoft.com/en-us/library/ms184325(v=SQL.90).aspx

24

आप COALESCE समारोह इसे सही ढंग से खाली कॉलम के लिए काम करेंगे अंदर NULLIF समारोह के साथ ही NULL कॉलम

SELECT FirstName, 
     LastName, 
     STUFF(
      COALESCE(',' + NULLIF(StreetAddress, ''), '') + 
      COALESCE(',' + NULLIF(City, ''), '') + 
      COALESCE(',' + NULLIF(Country, ''), '') + 
      COALESCE(',' + NULLIF(PostalCode , ''), ''), 
      1, 1, '') AS "Address" 
    FROM Client 
+0

न्यूलिफ़, कूल!फिर आप कोल्सिस (',' + न्यूलिफ़ (आरटीआरआईएम (एलटीआरआईएम (स्ट्रीट एड्रेस)), ''), '') प्राप्त करने के लिए किसी भी व्हाइटस्पेस को हटाने के लिए एलटीआरआईएम और आरटीआरआईएम जोड़ सकते हैं। –

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