मेरे पास एक SQL डेटाबेस है और मैं एक प्रश्न लिख रहा हूँ:

SELECT *
FROM Consignments
INNER JOIN OrderDetail
      ON Consignments.consignment_id = OrderDetail.consignment_id
INNER JOIN UserReferences
      ON OrderDetail.record_id = UserReferences.record_id
WHERE Consignments.despatch_date = '2020-04-23'

पहले कॉलम के भीतर है:consignment_id [यह कंसाइनमेंट टेबल से है]अंतिम कॉलम में है:senders_reference  [यह UserReferences टेबल से है]

अब - मेरे पास यह मुद्दा है - कि जब मैं किसी विशेष तिथि के लिए सभी खेप लेने के लिए क्वेरी चला रहा हूं - यह कई पंक्तियों को प्रदर्शित कर रहा है (डुप्लिकेट कंसाइनमेंट_आईडी के साथ) जब डेटाबेस के भीतर कई प्रेषक संदर्भ होते हैं।

यदि एक प्रेषक संदर्भ संख्या है - तो केवल 1 पंक्ति है।

यह समझ में आता है - क्योंकि डेटाबेस के लिए फ्रंट-एंड के भीतर उपयोगकर्ता 1 या अधिक प्रेषक संदर्भ दर्ज कर सकता है।

अब - मैं परिणामी डेटा के लिए अपनी क्वेरी में संशोधन करना चाहता हूं ताकि सभी खेपों के लिए केवल 1 पंक्ति प्रदर्शित की जा सके और यदि एकाधिक प्रेषक संदर्भ संख्याएं हैं - उन्हें एक फ़ील्ड में अल्पविराम से अलग करने के लिए।

क्या यह क्वेरी चरण से करने योग्य है?

या यदि नहीं - निर्यात के बाद, क्या समान कार्य करने के लिए बैट फ़ाइल विकसित करना संभव है?

संदर्भ के लिए - मेरा यही मतलब है - यह वह परिणाम है जो मुझे इस समय मिल रहा है: डेटा मैं इस समय प्राप्त कर रहा हूं मुझे इसकी ही आवश्यकता थी:

what i need

0
Rick 25 अप्रैल 2020, 09:20

2 जवाब

सबसे बढ़िया उत्तर

आप for xml की सहायता से पुरानी शैली का उपयोग कर सकते हैं:

select t.consignment_id,
       stuff((select ', ' +convert(varchar(255), t1.sender_reference)
              from table t1 
              where t1.consignment_id = t.consignment_id
              for xml path('')
             ), 1, 1, ''
            ) as senders_reference
from (select distinct consignment_id from table t) t;

संपादित करें: आप CTE का उपयोग कर सकते हैं:

with cte as (
     <your query>
)
select t.consignment_id,
       stuff((select ', ' +convert(varchar(255), t1.sender_reference)
              from cte t1 
              where t1.consignment_id = t.consignment_id
              for xml path('')
             ), 1, 1, ''
            ) as senders_reference
from (select distinct consignment_id from cte t) t;
1
Yogesh Sharma 25 अप्रैल 2020, 18:54

ऐसा लगता है कि आप STRING_AGG फ़ंक्शन का उपयोग करना चाहते हैं।

यह उत्तर इसे अच्छी तरह से कवर करता है SQLSERVER में ListAGG

1
Lars Br. 25 अप्रैल 2020, 09:54