PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Os valores da matriz são exibidos linha por linha para id único usando o Postgresql


Você deseja agrupar seus dados, então o local para procurar é em [lista de funções agregadas] (https://www.postgresql.org/docs/current/functions-aggregate.html ), neste caso é string_agg ( value text, delimiter text ) → text

Você deseja concatenar os dados de nomes e departamentos e deseja que os nomes e departamentos estejam em linhas separadas, conforme mostrado no exemplo. Para isso o E'\n' delimitador deve ser usado:
SELECT
  id,
  string_agg(name, E'\n') as names,
  string_agg(dept, E'\n') as depts
FROM 
  data
GROUP BY
  id
ORDER BY
  id;

A resposta mostra como e os comentários explicam por que não . A escolha é sua agora.

EDITAR 1

Se você preferir preservar o número de registros e exibir o ID com a primeira linha do grupo, você deve procurar nas funções da janela. Especificamente LAG .
SELECT
  CASE 
    WHEN id IS DISTINCT FROM LAG(id) OVER(order by id) THEN id 
    ELSE null 
  END as id,
  name,
  dept
FROM 
  data
order by
  data.id;

O sql compara o id atual com o da linha anterior e gera um valor nulo.