none
Concatenar Valores de Linhas em uma coluna RRS feed

  • Pergunta

  • Tenho a seguinte tabela:

    Codigo Cliente Produto
    1 Jorge piso
    1 Jorge porta
    1 Jorge torneira
           
    Preciso que o resultado deste select fique assim:
           
    Codigo Cliente Produto
    1 Jorge piso;porta;torneira

    Na primeira tabela o resultado do meu select, na segunda parte preciso que a coluna "Produto" seja concatenada, seprando os valores por ponto e vírgula.

    Alguém pode me passar um select que faça isto, please?

    terça-feira, 8 de maio de 2012 18:07

Respostas

  • Boa tarde Tiago,

    Veja se o exemplo abaixo te ajuda.

    -- Criando tabela
    CREATE TABLE TABELA(
    	CODIGO	INT,
    	CLIENTE	VARCHAR(25),
    	PRODUTO VARCHAR(25)
    );
    
    -- Inserindo dados
    INSERT INTO TABELA VALUES(1,'JORGE','Piso');
    INSERT INTO TABELA VALUES(1,'JORGE','Porta');
    INSERT INTO TABELA VALUES(1,'JORGE','Torneira');
    
    INSERT INTO TABELA VALUES(2,'MARIA','Carriola');
    INSERT INTO TABELA VALUES(2,'MARIA','Torneira');
    
    
    -- Concatenando
    SELECT  CODIGO,
    		CLIENTE,
    	COALESCE(
    		(SELECT CAST(PRODUTO AS VARCHAR(10)) + ';' AS [text()]
    		 FROM TABELA AS O
    		 WHERE O.CODIGO  = C.CODIGO
    		 and   O.CLIENTE = C.CLIENTE
    		 ORDER BY CODIGO
    		 FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'), '') AS Produtos
    FROM TABELA AS C
    GROUP BY CODIGO,CLIENTE;


    Adriano Nascimento

    • Marcado como Resposta Tiago Silva quarta-feira, 9 de maio de 2012 14:13
    terça-feira, 8 de maio de 2012 20:27

Todas as Respostas

  • já existem exemplos aqui no fórum,

    pesquise por concatenar linhas.


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    terça-feira, 8 de maio de 2012 20:07
  • Boa tarde Tiago,

    Veja se o exemplo abaixo te ajuda.

    -- Criando tabela
    CREATE TABLE TABELA(
    	CODIGO	INT,
    	CLIENTE	VARCHAR(25),
    	PRODUTO VARCHAR(25)
    );
    
    -- Inserindo dados
    INSERT INTO TABELA VALUES(1,'JORGE','Piso');
    INSERT INTO TABELA VALUES(1,'JORGE','Porta');
    INSERT INTO TABELA VALUES(1,'JORGE','Torneira');
    
    INSERT INTO TABELA VALUES(2,'MARIA','Carriola');
    INSERT INTO TABELA VALUES(2,'MARIA','Torneira');
    
    
    -- Concatenando
    SELECT  CODIGO,
    		CLIENTE,
    	COALESCE(
    		(SELECT CAST(PRODUTO AS VARCHAR(10)) + ';' AS [text()]
    		 FROM TABELA AS O
    		 WHERE O.CODIGO  = C.CODIGO
    		 and   O.CLIENTE = C.CLIENTE
    		 ORDER BY CODIGO
    		 FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'), '') AS Produtos
    FROM TABELA AS C
    GROUP BY CODIGO,CLIENTE;


    Adriano Nascimento

    • Marcado como Resposta Tiago Silva quarta-feira, 9 de maio de 2012 14:13
    terça-feira, 8 de maio de 2012 20:27
  • Adriano,

    That's peeeeeerfect. É tudo que eu precisava, ótimo...

    Valew...

    quarta-feira, 9 de maio de 2012 14:13
  • Faço este tipo concatenação mas recebo o seguinte erro...

    Msg 6841, Level 16, State 1, Line 2
    FOR XML could not serialize the data for node 'text()' because it contains a character (0x001F) which is not allowed in XML. To retrieve this data using FOR XML, convert it to binary, varbinary or image data type and use the BINARY BASE64 directive.

    o que devo fazer???


    Vinicius Silva vinycius01@gmail.com

    sexta-feira, 6 de junho de 2014 19:43
  • Código

    COALESCE(
                 ( SELECT distinct Email.Dsc_email + ',' AS [text()]
    FROM cad..Email AS Email
    WHERE Email.Pessoa_Codigo = ecad.Pessoa_Codigo      
    FOR XML PATH(''), TYPE).value('.[1]', 'NVARCHAR(MAX)'), ''
                  ) AS E_mail


    Vinicius Silva vinycius01@gmail.com

    sexta-feira, 6 de junho de 2014 19:44
  • Genial!!!

    Muito Obrigado!!

    quarta-feira, 14 de dezembro de 2016 17:54