मेरे पास एक 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 पंक्ति प्रदर्शित की जा सके और यदि एकाधिक प्रेषक संदर्भ संख्याएं हैं - उन्हें एक फ़ील्ड में अल्पविराम से अलग करने के लिए।
क्या यह क्वेरी चरण से करने योग्य है?
या यदि नहीं - निर्यात के बाद, क्या समान कार्य करने के लिए बैट फ़ाइल विकसित करना संभव है?
संदर्भ के लिए - मेरा यही मतलब है - यह वह परिणाम है जो मुझे इस समय मिल रहा है: मुझे इसकी ही आवश्यकता थी:
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;
ऐसा लगता है कि आप STRING_AGG
फ़ंक्शन का उपयोग करना चाहते हैं।
यह उत्तर इसे अच्छी तरह से कवर करता है SQLSERVER में ListAGG
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।