यह आपके बाद का क्लीनर दृष्टिकोण हो सकता है। मूल रूप से, जांचें कि क्या चर को अभी तक आरंभ किया गया है। यदि यह नहीं है, तो इसे खाली स्ट्रिंग पर सेट करें, और पहले शहर को जोड़ें (कोई अग्रणी अल्पविराम) नहीं। यदि यह है, तो एक अल्पविराम संलग्न करें, फिर शहर को जोड़ें।
DECLARE @col nvarchar(MAX);
SELECT @col = COALESCE(@col + ',', '') + city
FROM dbo.tbl WHERE state = 'California';
बेशक, यह केवल प्रति राज्य एक चर को आबाद करने के लिए काम करता है। यदि आप एक बार में प्रत्येक राज्य के लिए सूची खींच रहे हैं, तो एक शॉट में एक बेहतर समाधान है:
SELECT [state], cities = STUFF((
SELECT N', ' + city FROM dbo.tbl
WHERE [state] = x.[state]
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM dbo.tbl AS x
GROUP BY [state]
ORDER BY [state];
परिणाम:
state cities
---------- --------------------------------------
California San Francisco, Los Angeles, Sacramento
Florida Miami, Jacksonville
प्रत्येक राज्य के भीतर शहर के नाम से ऑर्डर करने के लिए:
SELECT [state], cities = STUFF((
SELECT N', ' + city FROM dbo.tbl
WHERE [state] = x.[state]
ORDER BY city
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM dbo.tbl AS x
GROUP BY [state]
ORDER BY [state];
Azure SQL डेटाबेस या SQL Server 2017+ में, आप नए STRING_AGG()
फ़ंक्शन का उपयोग कर सकते हैं :
SELECT [state], cities = STRING_AGG(city, N', ')
FROM dbo.tbl
GROUP BY [state]
ORDER BY [state];
और शहर के नाम से आदेश दिया गया है:
SELECT [state], cities = STRING_AGG(city, N', ')
WITHIN GROUP (ORDER BY city)
FROM dbo.tbl
GROUP BY [state]
ORDER BY [state];