Imagine a seguinte saida de um SELECT:
Cod | Banco | Cod. das Agências |
001 | Banco do Brasil | 03996,34096,03816 |
104 | Caixa Economica Federal | 12212,03996 |
237 | Bradesco | 00833 |
422 | Sicredi | 0153, 0300, 0500 |
Pergunto: Como obter a coluna com os Códigos das Agências concatenados e separados por virgula?
1ª solução “na base da força bruta”:
SELECT B.CODIGO,B.NOME,COALESCE((SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1),'') ||COALESCE(',' || (SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1 OFFSET 1), '') ||COALESCE(',' || (SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1 OFFSET 2), '') ||COALESCE(',' || (SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1 OFFSET 3), '')FROM BANCO BORDER BY 1,3
Até que a solução acima funciona, porém pouco eficiente, e com limitações, no caso limitado a 4 agências.
2ª solução “o ideal”:
SELECT B.Codigo,B.Nome,ARRAY_TO_STRING(Array(SELECT A.Agencia::VARCHARFROM Agencia AWHERE A.Banco = B.Codigo),',') AS AgenciasFROM Banco B
Agora sim, temos uma solução mais eficiente, e sem limite de agências.
Nenhum comentário:
Postar um comentário