none
Concatenar linhas em uma coluna - URGENTE RRS feed

  • Pergunta

  • Olá,

    eu tenho uma consulta que retorna o seguinte:

    cod_vaga  dsc_vaga

    x              terreo

    y              terreo

    z              terreo


    a consulta é essa:

    SELECT
    XVAGA.COD_VAGA,
    XVAGA.DSC_VAGA,
    1 AS QTD
    FROM
    XVENDA
    JOIN XITEMVENDA XI ON
    XI.NUM_VENDA = XVENDA.NUM_VENDA
    AND XI.COD_PESS_EMPR = XVENDA.COD_PESS_EMPR
    LEFT JOIN XVAGA ON
    XVAGA.NUM_UNID = XI.NUM_UNID
    AND XVAGA.NUM_SUB_UNID = XI.NUM_SUB_UNID
    AND XVAGA.COD_PESS_EMPR = XI.COD_PESS_EMPR
    WHERE
    XVENDA.NUM_VENDA = 531

    porém eu preciso que retorne o seguinte: terreo: x , y, z

    Estou quebrando a cabeça e não acho uma forma de fazer isso, me ajudem please. rs






    quarta-feira, 8 de novembro de 2017 16:32

Respostas

  • Não cheguei a testar, mas veja se resolve

    WITH CTE AS(
    SELECT
    XVAGA.DSC_VAGA,
    XVAGA.COD_VAGA,
    1 AS QTD
    FROM
    XVENDA
    JOIN XITEMVENDA XI ON
    XI.NUM_VENDA = XVENDA.NUM_VENDA
    AND XI.COD_PESS_EMPR = XVENDA.COD_PESS_EMPR
    LEFT JOIN XVAGA ON
    XVAGA.NUM_UNID = XI.NUM_UNID
    AND XVAGA.NUM_SUB_UNID = XI.NUM_SUB_UNID
    AND XVAGA.COD_PESS_EMPR = XI.COD_PESS_EMPR
    WHERE
    XVENDA.NUM_VENDA = 531 )
    
    SELECT DISTINCT DSC_VAGA,
    STUFF((SELECT ','+COD_VAGA
    from CTE Q1
    where Q1.DSC_VAGA=Q2.DSC_VAGA
    FOR XML PATH('')),1,1,'')
    FROM CTE Q2


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Marcado como Resposta NataRangel quarta-feira, 8 de novembro de 2017 18:04
    quarta-feira, 8 de novembro de 2017 16:53

Todas as Respostas

  • Olá, veja se isso atende.

    se atender é só você adaptar para sua query.

    CREATE TABLE #TABELA(
    	letra	VARCHAR(25),
    	andar VARCHAR(25)
    );
    
    -- Inserindo dados
    INSERT INTO #TABELA VALUES('x','terreo');
    INSERT INTO #TABELA VALUES('y','terreo');
    INSERT INTO #TABELA VALUES('z','terreo');
    
    
    -- Concatenando
    SELECT  distinct 
    		andar,
    	COALESCE(
    		(SELECT CAST(letra AS VARCHAR(10)) + ';' AS [text()]
    		 FROM #TABELA AS O
    		 WHERE O.andar = C.andar
    		 ORDER BY o.letra
    		 FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'), '') AS andars
    FROM #TABELA AS C


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)

    quarta-feira, 8 de novembro de 2017 16:45
  • Não cheguei a testar, mas veja se resolve

    WITH CTE AS(
    SELECT
    XVAGA.DSC_VAGA,
    XVAGA.COD_VAGA,
    1 AS QTD
    FROM
    XVENDA
    JOIN XITEMVENDA XI ON
    XI.NUM_VENDA = XVENDA.NUM_VENDA
    AND XI.COD_PESS_EMPR = XVENDA.COD_PESS_EMPR
    LEFT JOIN XVAGA ON
    XVAGA.NUM_UNID = XI.NUM_UNID
    AND XVAGA.NUM_SUB_UNID = XI.NUM_SUB_UNID
    AND XVAGA.COD_PESS_EMPR = XI.COD_PESS_EMPR
    WHERE
    XVENDA.NUM_VENDA = 531 )
    
    SELECT DISTINCT DSC_VAGA,
    STUFF((SELECT ','+COD_VAGA
    from CTE Q1
    where Q1.DSC_VAGA=Q2.DSC_VAGA
    FOR XML PATH('')),1,1,'')
    FROM CTE Q2


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Marcado como Resposta NataRangel quarta-feira, 8 de novembro de 2017 18:04
    quarta-feira, 8 de novembro de 2017 16:53
  • Nossaaaaaaa funcionou certinho, muitíssimo obrigada, estou a quebrar a cabeça tem dias e não conseguia, salvou a minha vida rs, vou estudar essa query para próximas vezes que precisar.

    Não cheguei a testar, mas veja se resolve

    WITH CTE AS(
    SELECT
    XVAGA.DSC_VAGA,
    XVAGA.COD_VAGA,
    1 AS QTD
    FROM
    XVENDA
    JOIN XITEMVENDA XI ON
    XI.NUM_VENDA = XVENDA.NUM_VENDA
    AND XI.COD_PESS_EMPR = XVENDA.COD_PESS_EMPR
    LEFT JOIN XVAGA ON
    XVAGA.NUM_UNID = XI.NUM_UNID
    AND XVAGA.NUM_SUB_UNID = XI.NUM_SUB_UNID
    AND XVAGA.COD_PESS_EMPR = XI.COD_PESS_EMPR
    WHERE
    XVENDA.NUM_VENDA = 531 )
    
    SELECT DISTINCT DSC_VAGA,
    STUFF((SELECT ','+COD_VAGA
    from CTE Q1
    where Q1.DSC_VAGA=Q2.DSC_VAGA
    FOR XML PATH('')),1,1,'')
    FROM CTE Q2


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski


    quarta-feira, 8 de novembro de 2017 17:46
  • Oi, obrigada, porém os dados não são sempre os mesmos, eu não sei quais virão na consulta pois os mesmos já estão inseridos.

    Olá, veja se isso atende.

    se atender é só você adaptar para sua query.

    CREATE TABLE #TABELA(
    	letra	VARCHAR(25),
    	andar VARCHAR(25)
    );
    
    -- Inserindo dados
    INSERT INTO #TABELA VALUES('x','terreo');
    INSERT INTO #TABELA VALUES('y','terreo');
    INSERT INTO #TABELA VALUES('z','terreo');
    
    
    -- Concatenando
    SELECT  distinct 
    		andar,
    	COALESCE(
    		(SELECT CAST(letra AS VARCHAR(10)) + ';' AS [text()]
    		 FROM #TABELA AS O
    		 WHERE O.andar = C.andar
    		 ORDER BY o.letra
    		 FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'), '') AS andars
    FROM #TABELA AS C


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)


    quarta-feira, 8 de novembro de 2017 17:47
  • Se puder marque a resposta como solução.

    Obrigado!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quarta-feira, 8 de novembro de 2017 17:53