2010-07-30 17 views
17

के लिए समूहबद्ध स्ट्रिंग एकत्रीकरण/LISTAGG मुझे यकीन है कि यह पूछा गया है लेकिन मुझे सही खोज शब्द नहीं मिल रहे हैं।SQL सर्वर

इस तरह एक स्कीमा को देखते हुए:

| CarMakeID | CarMake 
------------------------ 
|   1 | SuperCars 
|   2 | MehCars 

| CarMakeID | CarModelID | CarModel 
----------------------------------------- 
|   1 |   1 | Zoom 
|   2 |   1 | Wow 
|   3 |   1 | Awesome 
|   4 |   2 | Mediocrity 
|   5 |   2 | YoureSettling 

मैं इस तरह एक डाटासेट का उत्पादन करना चाहते हैं:

| CarMakeID | CarMake | CarModels 
--------------------------------------------- 
|   1 | SuperCars | Zoom, Wow, Awesome 
|   2 | MehCars | Mediocrity, YoureSettling 

क्या मैं में एसक्यूएल सर्वर में स्ट्रिंग्स के लिए 'AGG' के स्थान पर क्या करते हैं निम्नलिखित शैली पूछताछ?

SELECT *, 
(SELECT AGG(CarModel) 
    FROM CarModels model 
    WHERE model.CarMakeID = make.CarMakeID 
    GROUP BY make.CarMakeID) as CarMakes 
FROM CarMakes make 

उत्तर

11

http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

यह चलाना एसक्यूएल में एक दिलचस्प समस्या है, जिसके लिए समाधान और काफी बहस की एक संख्या देखते हैं है। सारांश सारांश तैयार करने के बारे में आप कैसे जाते हैं जिसमें प्रत्येक विशेष श्रेणी में प्रत्येक पंक्ति से एक विशिष्ट कॉलम 'कुल' कॉलम में सूचीबद्ध होता है? डेटा प्रदर्शित करने का एक सरल, और सहज ज्ञान प्राप्त करना आश्चर्यजनक रूप से हासिल करना मुश्किल है। Anith सेन अलग अलग तरीकों का एक सारांश देता है, और एक आप चुनते से अधिक सावधानी के शब्द प्रदान करता है ...

+1

वाह गैर तुच्छ। –

+2

आलेख को एक अद्यतन की आवश्यकता है - सीएलआर SQL सर्वर 2005 के लिए था। 2008 एक समग्र फ़ंक्शन में एकाधिक पैरामीटर का समर्थन करता है, ताकि आप MySQL के GROUP_CONCAT के पैरामीटर को पुन: बना सकें। –

+0

@ ओएमजी टट्टू: क्या आप अधिक समझा सकते हैं या लिंक कर सकते हैं? बिल्कुल यकीन नहीं है कि आपका क्या मतलब है ... – gbn

4

यदि यह SQL सर्वर 2017 या SQL सर्वर vNext, Azure SQL डेटाबेस आप नीचे के रूप में उपयोग कर सकते हैं String_agg है:

SELECT make.CarMakeId, make.CarMake, 
     CarModels = string_agg(model.CarModel, ', ') 
FROM CarModels model 
    INNER JOIN CarMakes make 
    ON model.CarMakeId = make.CarMakeId 
GROUP BY make.CarMakeId, make.CarMake 

आउटपुट:

+-----------+-----------+---------------------------+ 
| CarMakeId | CarMake |   CarModels   | 
+-----------+-----------+---------------------------+ 
|   1 | SuperCars | Zoom, Wow, Awesome  | 
|   2 | MehCars | Mediocrity, YoureSettling | 
+-----------+-----------+---------------------------+