Como eu consigo:
id Name Value
1 A 4
1 B 8
2 C 9
para
id Column
1 A:4, B:8
2 C:9
Como eu consigo:
id Name Value
1 A 4
1 B 8
2 C 9
para
id Column
1 A:4, B:8
2 C:9
GROUP_CONCAT()
função agregada, mas resolvê-lo no Microsoft SQL Server é mais complicado. Consulte a seguinte pergunta do SO para obter ajuda: " Como obter vários registros em um registro com base na relação? "Respostas:
Não é necessário nenhum CURSOR, WHILE loop ou Função Definida pelo Usuário .
Só precisa ser criativo com FOR XML e PATH.
[Nota: Esta solução funciona apenas no SQL 2005 e posterior. A pergunta original não especificou a versão em uso.]
fonte
Se for o SQL Server 2017 ou o SQL Server Vnext, SQL Azure, você poderá usar string_agg como abaixo:
fonte
o uso do caminho XML não concatenará perfeitamente como seria de esperar ... ele substituirá "&" por "& amp;" e também vai mexer com
<" and ">
... talvez algumas outras coisas, não tenho certeza ... mas você pode tentar issoMe deparei com uma solução alternativa para isso ... você precisa substituir:
com:
... ou
NVARCHAR(MAX)
se é isso que você está usando.por que diabos não
SQL
tem uma função agregada concatenada? isso é uma PITA.fonte
Corri para um par de problemas quando eu tentei converter a sugestão de Kevin Fairchild ao trabalho com cordas contendo espaços e caracteres XML especiais (
&
,<
,>
) que foram codificadas.A versão final do meu código (que não responde à pergunta original, mas pode ser útil para alguém) fica assim:
Em vez de usar um espaço como delimitador e substituir todos os espaços por vírgulas, ele apenas pré-vírgula e espaço para cada valor usado
STUFF
para remover os dois primeiros caracteres.A codificação XML é resolvida automaticamente usando a diretiva TYPE .
fonte
Outra opção usando o Sql Server 2005 e superior
fonte
Instale os agregados SQLCLR em http://groupconcat.codeplex.com
Em seguida, você pode escrever um código como esse para obter o resultado solicitado:
fonte
O SQL Server 2005 e versões posteriores permitem que você crie suas próprias funções agregadas personalizadas , inclusive para concatenação - veja o exemplo na parte inferior do artigo vinculado.
fonte
Oito anos depois ... O Microsoft SQL Server vNext Database Engine finalmente aprimorou o Transact-SQL para suportar diretamente a concatenação de cadeias agrupadas. O Community Technical Preview versão 1.0 adicionou a função STRING_AGG e o CTP 1.1 adicionou a cláusula WITHIN GROUP para a função STRING_AGG.
Referência: https://msdn.microsoft.com/en-us/library/mt775028.aspx
fonte
Esta é apenas uma adição ao post de Kevin Fairchild (muito inteligente a propósito). Eu o teria adicionado como um comentário, mas ainda não tenho pontos suficientes :)
Eu estava usando essa idéia para uma visão em que estava trabalhando, no entanto, os itens que eu concatinava continha espaços. Então, modifiquei o código levemente para não usar espaços como delimitadores.
Mais uma vez obrigado pela solução legal Kevin!
fonte
Um exemplo seria
No Oracle, você pode usar a função agregada LISTAGG.
Registros originais
Sql
Resulta em
fonte
Esse tipo de pergunta é feita aqui com muita frequência e a solução dependerá muito dos requisitos subjacentes:
https://stackoverflow.com/search?q=sql+pivot
e
https://stackoverflow.com/search?q=sql+concatenate
Normalmente, não há uma maneira somente SQL de fazer isso sem sql dinâmico, uma função definida pelo usuário ou um cursor.
fonte
Apenas para acrescentar ao que o Cade disse, isso geralmente é uma coisa de exibição de front-end e, portanto, deve ser tratado lá. Sei que às vezes é mais fácil escrever algo 100% no SQL para coisas como exportação de arquivos ou outras soluções "somente SQL", mas na maioria das vezes essa concatenação deve ser tratada na camada de exibição.
fonte
Não precisa de um cursor ... um loop while é suficiente.
fonte
Vamos ser muito simples:
Substitua esta linha:
Com sua consulta.
fonte
não encontrou nenhuma resposta cruzada, também não há necessidade de extração de xml. Aqui está uma versão ligeiramente diferente do que Kevin Fairchild escreveu. É mais rápido e fácil de usar em consultas mais complexas:
fonte
Você pode melhorar o desempenho de maneira significativa da seguinte maneira, se agrupar por conter principalmente um item:
fonte
Usando Substituir Função e FOR JSON PATH
Para dados de amostra e mais maneiras, clique aqui
fonte
Se você tiver ativado o clr, poderá usar a biblioteca Group_Concat do GitHub
fonte