2009-05-04 13 views
5

एक SQL विवरण (या प्रक्रिया) मैं एक ही अल्पविराम से परे स्ट्रिंग में इस तालिका की पंक्तियां संक्षिप्त करने के लिए चाहते हैं।एक स्ट्रिंग में चयन की पंक्तियों को ध्वस्त करने का सबसे अच्छा तरीका क्या है?

simpleTable 

id value 
-- ----- 
1 "a" 
2 "b" 
3 "c" 

संक्षिप्त करने के लिए:

"a, b, c" 

उत्तर

5

आप एक प्रश्न में एक एम्बेडेड बयान 'सेट' का उपयोग कर जोड़ सकते हैं:

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + isnull(value,'') 
from simpleTable 

print @combined

(ध्यान दें कि पहली isnull() स्ट्रिंग initialises, और दूसरा isnull(), विशेष रूप से महत्वपूर्ण है कि वहाँ 'मूल्य' कॉलम में nulls का कोई मौका है कि अगर है क्योंकि अन्यथा एक भी अशक्त

पूरे संयोजन का सफाया कर सकता है)

(संपादित कोड और टिप्पणियों के बाद स्पष्टीकरण)

+0

मिठाई! मुझे एहसास नहीं हुआ कि आप ऐसा कर सकते हैं। मैंने हमेशा सोचा और सेट असाइनमेंट के लिए वही काम किया। –

+1

आप इसे "+ ISNULL (मान, '')" बनाना चाहते हैं क्योंकि "+ मान" स्ट्रिंग के किसी हिस्से को शून्य मान –

+0

के साथ पंक्ति से पहले बनाएगा, आप सही हैं! पता नहीं कैसे मैं इसे याद किया ... संपादित किया है। – codeulike

2
DECLARE @EmployeeList varchar(100) 

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 
    CAST(Emp_UniqueID AS varchar(5)) 
FROM SalesCallsEmployees 
WHERE SalCal_UniqueID = 1 

SELECT @EmployeeList 

परिणाम:

1, 2, 4 
3

यह केवल अतिरिक्त रोकने के लिए MSSQL में काम करेंगे 2005+

select value + ',' from simpletable for xml path ('') 

..one रास्ता अल्पविराम:

select case(row_number() over (order by id)) 
when 1 then value else ',' + value end 
from simpletable 
for xml path ('') 
+0

केवल SQLServer 2005+ में काम करता है, लेकिन हाँ यह एक मजेदार हैक। – FlySwat

+0

अगर उस अंतिम कॉमा को हटाने के लिए केवल एक मामूली तरीका था :) – dotjoe

+0

ने उस अंतिम कॉमा को हटाने के लिए एक शानदार तरीका जोड़ा :) – gordy

0

यह @codeulike उत्तर पर आधारित है, लेकिन उस स्ट्रिंग के हिस्से को खोने से रोक देगा जो एक शून्य "मान" से पहले संगत हो जाता है।

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + ISNULL(value,'') 
from simpleTable 

print @combined 
संबंधित मुद्दे

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