quarta-feira, 9 de outubro de 2013

SQL - Concatenar registros de várias linhas com COALESCE



















Ontem me deparei com um "problema"... Precisava concatenar os registros do banco de dados em uma aplicação, até ai sem problemas, é só fazer um LOOP no retorno do banco, concatenar e pronto! Não... Não poderia ser feito assim, pois para fazermos uma alteração na aplicação, a mesma precisa passar de desenvolvimento para homologação (passo esse que demora), para só depois ir para o ambiente de produção. Quando a alteração/manutenção é feita no Banco é bem mais rápido, quase instantâneo, menos burocrático.

Tive a idéia de fazer o mesmo LOOP no SQL (mesmo não sendo adepto a essa prática), mas sem sucesso. Eis que pesquisando um pouco achei o comando COALESCE... E não é que era EXATAMENTE o que eu precisava?!

Tem uma síntaxe simples... Rápida... Vejamos o código:

-- Variável para receber os registros da tabela separados por ","
DECLARE @Lista VARCHAR(80)

-- Define o valor para vazio
SET @Lista = ''

-- Seleciona o registro, e coloca na variável
SELECT @Lista = @Lista + ',' + COALESCE(CAMPO_DA_TABELA, '') FROM TABELA

-- Remove primeira "," da variável
SET @Lista = SUBSTRING(@Lista, 2, LEN(@Lista))

-- Exibe os resultados da variável
SELECT @Lista

Essa aqui foi uma solução que encontrei para fazer um select de múltiplos registros na mesma linha, separando-os por vírgula.

Você pode trocar o separador conforme a sua necessidade, pode ser um pipe "|", ponto e vírgula ";", ponto ".", ou qualquer outro carctere a sua escolha.

3 comentários: