2009-01-29 10 views
19

मैं एक मेजGROUP_BY खंड में मानों की सूची कैसे प्राप्त करें?

id data 
-- ---- 
1 1 
1 2 
1 3 
2 4 
2 5 
3 6 
3 4 

मैं कैसे एक प्रश्न (Sybase सर्वर पर) में इस तरह के परिणाम मिलता है में इस तरह डेटा है, तो?

id data 
-- ---- 
1 1, 2, 3 
2 4, 5 
3 6, 4 
+0

क्षमा करें, मैं सवाल समझ में नहीं आता। । । सभी –

+0

@ बाइनरी वर्रियर, ओह, प्रारूपण खराब हो गया। इसे संपादित करना – Jagmal

+0

चिंता मत करो, जगमल, यह तय है। – paxdiablo

उत्तर

2

आप सादा-वेनिला एसक्यूएल में सीधे समूह में ऐसा नहीं कर सकते हैं। मैन्युअल रूप से प्रत्येक समूह में मानों को संयोजित करने के लिए आपको कर्सर (या एक समान निर्माण) का उपयोग करना होगा।

  • ओरेकल आपको एक कस्टम एग्रीगेटर परिभाषित करने देता है जो पीएल/एसक्यूएल में इस संयोग को करेगा।
  • SQL सर्वर आपको .NET में एक कस्टम एग्रीगेटर परिभाषित करने देता है जो यह भी करेगा।
  • मुझे यकीन नहीं है कि साइबेज के कस्टम एग्रीगेटर्स को परिभाषित करने के लिए कौन से विकल्प हैं।
+0

धन्यवाद, यही एकमात्र तरीका था जिसके बारे में मैंने सुना था। – Jagmal

+0

साइबेस आपको सी/सी ++ में उपयोगकर्ता द्वारा परिभाषित एकत्रीकरण कार्यों को परिभाषित करने देता है। – cwills

0

यह एक कुछ वर्षों के बाद से मैं सिंटेक्स के उपयोग की कोशिश की है और मैं अब एक iAnywhere उदाहरण के लिए उपयोग किया गया है, लेकिन ऐसा कार्य करने के लिए एक समग्र कार्य (सूची) थी। मैं पुष्टि नहीं कर सकता कि LIST() अभी भी समर्थित है या नहीं।

SELECT id, 
     LIST(data) 
FROM table 
GROUP BY id 
+0

ऐसा नहीं लगता है कि यह SQL Server 2008 R2 (10.50.2500) में समर्थित है ("LIST 'एक मान्यता प्राप्त अंतर्निहित फ़ंक्शन नाम नहीं है।") –

4

MSSQL में आप एक समारोह का उपयोग कर सकते

CREATE FUNCTION [dbo].[GetDataForID] 
(
    @ID int 
) 
RETURNS varchar(max) 
AS 
BEGIN 
    declare @output varchar(max) 
    select @output = COALESCE(@output + ', ', '') + data 
    from table 
    where ID = @ID 

    return @output 
END 
GO 

और फिर (यदि वहाँ Sybase में इसी तरह के somenthing है पता नहीं है):

SELECT ID, dbo.GetDataForID(ID) as Data 
FROM Table 
GROUP BY ID 
9

मुझे लगता है कि MySQL में वहाँ पता GROUP_CONCAT है और साइबेस में मुझे लगता है कि यह LIST है जैसा कि दूसरे उत्तर में बताया गया है:

SELECT id, LIST(data||', ') 
FROM yourtable 
GROUP BY id 
+0

यह बात है! धन्यवाद –

0

इस एक का प्रयास करें:

SELECT id, 
     GROUP_CONCAT(data) 
FROM table 
GROUP BY id 
+0

यह MySQL के लिए है, साइबेज नहीं, जैसा कि प्रश्न में निर्दिष्ट है। –

+0

मौजूदा उत्तरों को पढ़ने का प्रयास करें ... – Yura

0

PostgreSQL के लिए, एक समान कार्य string_agg का उपयोग कर।

SELECT id, string_agg(data, ',') 
FROM yourtable 
GROUP BY id 
0

PL/SQL में आप यह द्वारा कर सकते हैं:

SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data" 
    FROM yourtable 
GROUP BY id 
संबंधित मुद्दे