PostgreSQL
SELECT
a,
STRING_AGG('(' || c || ',' || b || ')', ' ; ')
FROM
tbl
GROUP BY
a;
Modifica :Per le versioni di PostgreSQL precedenti alla 9.0 (quando è stato introdotto STRING_AGG) e anche precedenti alla 8.4 (quando è stato aggiunto ARRAY_AGG) puoi creare il tuo funzione di aggregazione personalizzata .
Modifica 2 :Per le versioni precedenti alla 8.0 (forse Amazon Redshift è in qualche modo basato su PostgreSQL 7.4) la sintassi $$ non è supportata, quindi il corpo della funzione deve essere racchiuso tra virgolette e le virgolette all'interno del corpo devono essere precedute da escape.
CREATE FUNCTION cut_semicolon(text) RETURNS text AS '
BEGIN
RETURN SUBSTRING($1 FROM 4);
END;
' LANGUAGE 'plpgsql' IMMUTABLE;
CREATE FUNCTION concat_semicolon(text, text) RETURNS text AS '
BEGIN
RETURN $1 || '' ; '' || $2;
END;
' LANGUAGE 'plpgsql' IMMUTABLE;
CREATE AGGREGATE concat_semicolon(
BASETYPE=text,
SFUNC=concat_semicolon,
STYPE=text,
FINALFUNC=cut_semicolon,
INITCOND=''
);
Quindi usa invece quell'aggregato.
SELECT
a,
CONCAT_SEMICOLON('(' || c || ',' || b || ')')
FROM
tbl
GROUP BY
a;
MySQL
SELECT
a,
GROUP_CONCAT(CONCAT('(', c, ',', b, ')') SEPARATOR ' ; ')
FROM
tbl
GROUP BY
a;