मुझे लगता है कि यह आसान होना चाहिए, लेकिन मैं इसे समझ नहीं सकता या यहां कोई समाधान नहीं ढूंढ सकता।

मेरे पास एक टेबल है ITEM_PROPERTIES

item_ID int
property_name char(20)
property_value char(20)

नमूना डेटा

5   Colour  Black
5   Size    M   
6   Colour  Blue
6   Size    L   
7   Colour  Purple
7   Size    M   
8   Colour  Blue
8   Size    S   
9   Colour  Wine
9   Size    M   

यदि मैं करता हूँ:

SELECT property_value, count(property_value) 
FROM ITEM_PROPERTIES where property_name='Colour'
group by property_value

मुझे समझ आ गया :

Black   1
Blue    2
Purple  1
Wine    1

मैं इसे एक पंक्ति पर कैसे प्राप्त कर सकता हूं जैसे:

Black 1, Blue 2, Purple 1, Wine 1

मैंने कोशिश की :

SELECT group_concat(property_value, count(property_value)) 
FROM ITEM_PROPERTIES where property_name='Colour'
group by property_value

SELECT group_concat(concat(property_value, count(property_value))) 
FROM ITEM_PROPERTIES where property_name='Colour'
group by property_value

लेकिन दोनों एक त्रुटि देते हैं समूह समारोह का अमान्य उपयोग

2
KevInSol 21 अप्रैल 2016, 14:02

3 जवाब

सबसे बढ़िया उत्तर
select group_concat(concat(property_value, '  ', cnt))
from (
    SELECT property_value, count(property_value) as cnt
     FROM ITEM_PROPERTIES
     WHERE property_name = 'Colour'
     GROUP BY property_value
) c
7
Pavel Zimogorov 21 अप्रैल 2016, 14:09

आप एकत्रीकरण के दो स्तरों का उपयोग कर सकते हैं:

SELECT group_concat(property_value, ' ', cnt separator ', ')
FROM (SELECT property_value, count(property_value) as cnt
      FROM ITEM_PROPERTIES
      WHERE property_name = 'Colour'
      GROUP BY property_value
     ) ip;
4
Gordon Linoff 21 अप्रैल 2016, 14:06

अरे कृपया निम्नलिखित फ़ंक्शन की जाँच करें यह किसी भी बाद के उपयोग के लिए किसी भी प्रश्न के लिए उपयोगी होगा:

CREATE OR REPLACE FUNCTION "JOIN"
(
    p_cursor  sys_refcursor
   ,p_del     VARCHAR2:=','
)
RETURN VARCHAR2
IS
    l_value   VARCHAR2(32767);
    l_result  VARCHAR2(32767);
BEGIN
    LOOP
        FETCH p_cursor INTO l_value;
        EXIT WHEN p_cursor%NOTFOUND;
        IF  l_result IS NOT NULL
        THEN
            l_result:=l_result || p_del;
        END IF;
        l_result:=l_result || l_value;
    END LOOP;

    close p_cursor;
    RETURN l_result;
END JOIN;

इस फ़ंक्शन को कॉल करने के लिए निम्न नमूने का उपयोग करें:

SELECT Join(CURSOR(select column from tableName)) FROM DUAL;

चियर्स

0
Phoenician 21 अप्रैल 2016, 14:30