我认为这应该很简单,但我无法弄明白或在这里找到解决方案。
我有一个表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
但两者都给出错误无效使用群组功能
答案 0 :(得分:7)
djgpp -E -x c -dM /dev/null
答案 1 :(得分:3)
您可以使用两个级别的聚合:
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;
答案 2 :(得分:0)
嘿,请检查以下函数,它对任何后续用途的查询都有用:
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;
干杯