2015-06-15 8 views
6

मेरे पास जैसे कॉलम के साथ एक तालिका CommentsTable है।कॉमा से अलग मूल्य के रूप में एक कॉलम में एकाधिक कॉलम मान

सभी टिप्पणियां कॉलम VARCHAR (200) हैं, डिफ़ॉल्ट रूप से सभी कॉलम NULL भी हैं।

CommentId CommentA CommentB CommentC CommentD CommentE 
--------------------------------------------------------------------- 
12345  NULL  C 001  C 002  NULL  C 003 
45678  C 005  NULL  NULL  C 007  NULL 
67890  C 010  NULL  C 011  C 012  NULL 
36912  C 021  C 023  C 024  C 025  C 026 

मैं शून्य मान बचने की जरूरत है और शेष मानों comma साथ CONCATENATE हैं:

डेटा की तरह दिखता है।

तो, उम्मीद उत्पादन की तरह:

CommentId CommetDetails 
------------------------------- 
12345  C 001, C 002, C 003 
45678  C 005, C 007 
67890  C 010, C 011, C 012 
36912  C 021, C 023, C 024, C 025, C 026 

मैं साधारण क्वेरी के साथ करने की कोशिश की:

SELECT CommentId, ISNULL(CommentA, '') + ', ' + ISNULL(CommentB, '') + ', ' + 
     ISNULL(CommentC, '') + ', ' + ISNULL(CommentD, '') + ', ' + 
     ISNULL(CommentE, '') [CommentDetails] 
FROM CommentsTable 
WHERE ...... --Some conditions 

लेकिन अवांछित comma हुआ कर रहे हैं, तो IIF

SELECT CommentId, 
     IIF(ISNULL(CommentA, '') <> '', (CommentA + ', '), '') + 
     IIF(ISNULL(CommentB, '') <> '', (CommentB + ', '), '') + 
     IIF(ISNULL(CommentC, '') <> '', (CommentC + ', '), '') + 
     IIF(ISNULL(CommentD, '') <> '', (CommentD + ', '), '') + 
     ISNULL(CommentE, '') [CommentDetails] 
FROM CommentsTable 
WHERE ...... --Some conditions 

लेकिन यहाँ जोड़ा भी, comma अंतिम में हुआ कुछ मामलों के लिए स्थिति (यदि CommentD, CommetENULL हैं।

क्या सभी मामलों के लिए हल करने का कोई तरीका है।

Sample SQL Fiddle

+0

आपको अपने आखिरी उदाहरण के साथ एसक्यूएल फिड स्क्रिप्ट अपडेट करें, ठीक उसी स्थिति में जहां आप अंत में एक अवांछित कॉमा है। –

उत्तर

9

आप ISNULL इस ISNULL(',' + CommentA, '') की तरह इस्तेमाल करते हैं और इस तरह आपकी क्वेरी लिख सकते हैं।

SELECT CommentId, 
STUFF(
ISNULL(',' + CommentA, '') + 
ISNULL(',' + CommentB, '') + 
ISNULL(',' + CommentC, '') + 
ISNULL(',' + CommentD, '') + 
ISNULL(',' + CommentE, ''),1,1,'') as [CommentDetails] 
FROM CommentsTable 
WHERE ...... //Some conditions 

परिणाम SQL Fiddle में देखें।

+0

मुझे तब भी तेज करें, लेकिन मुझे वास्तव में 'STUFF' की आवश्यकता नहीं दिखाई दे रही है ... –

+2

@ZoharPeled को प्रारंभिक ',' – ughai

+2

@RagingBull को हटाने की आवश्यकता है - धन्यवाद, मैं भी मेरा पूरा कर रहा था :) – ughai

0
create table #test 
(
CommentId int, 
CommentA nvarchar(200), 
CommentB nvarchar(200), 
CommentC nvarchar(200), 
CommentD nvarchar(200), 
CommentE nvarchar(200) 

) 
insert into #test values(12345,NULL,'C 001','C 002',NULL,'C 003') 
insert into #test values(45678,'C 005',NULL,NULL,'C 007',NULL) 
insert into #test values(67890,'C 010',NULL,'C 011','C 012',NULL) 
insert into #test values(36912,'C 021','C 023','C 024','C 025','C 026') 

उपयोग इस कोड:

select CommentId,STUFF(ISNULL(','+CommentA,'')+ 
         ISNULL(','+CommentB,'')+ 
         ISNULL(','+CommentC,'')+ 
         ISNULL(','+CommentD,'')+ 
         ISNULL(','+CommentE,''),1,1,'') As Comment 
from #test 
order by CommentId 
0

ऊपर उत्तर सही हैं और स्वीकार किए जाते हैं जवाब देने के लिए लेकिन कुछ कॉलम मामले में कोई चुनौती खाली स्ट्रिंग शून्य के बजाय फिर नीचे दी गई मदद कर सकता है। कृपया बेहतर दृष्टिकोण के लिए संकोच न करें और अगर यह गलत है तो मुझे सही करें।

SELECT CommentId, 
STUFF(
ISNULL(',' + CASE WHEN CommentA= '' THEN NULL ELSE CommentA END, '') + 
ISNULL(',' + CASE WHEN CommentB= '' THEN NULL ELSE CommentB END, '') + 
ISNULL(',' + CASE WHEN CommentC= '' THEN NULL ELSE CommentC END, '') + 
ISNULL(',' + CASE WHEN CommentD= '' THEN NULL ELSE CommentD END, '') + 
ISNULL(',' + CASE WHEN CommentE= '' THEN NULL ELSE CommentE END, ''),1,1,'') as [CommentDetails] 
FROM CommentsTable 
संबंधित मुद्दे