none
em uma query SQL, trazer valores de linhas em uma só linha agrupados? RRS feed

  • Pergunta

  • Pessoal preciso trazer uma lista de tipo 3 itens com as mesmas chaves mas com uma valor de coluna diferente na mesma linha tipo assim:

    Tenho a seguinte Query:

    SELECT DISTINCT CPF, SchoolID
    FROM            Ecoe.CandudateUnits
    WHERE        (CPF = 342199609)

    Que me traz o seguinte resultado:

    CPF             SchoolID
    342199609 1501
    342199609 1801
    342199609 2701
    342199609 5701

    Mas preciso que o resiltado seja:

    CPF             SchoolID
    342199609 1501 1801 2701 2701

    Uma especie de pivot mais os valores da schoolid ficassem na mesma coluna agrupados, tipo uma string com espaços entre um e outro.

    Fico no aguardo.

    Att.


    Moizés Cerqueira | MCP / MCTS SQL SERVER

    quarta-feira, 15 de outubro de 2014 21:38

Respostas

  • Roberto, desta forma funcionou a tendeu perfeitamente.

    Agora minha dúvida é como usar isso em um sub select.

    Tipo:

    (SELECT        COUNT(CandidateID) AS Valor
    FROM            Ecoe.Candidate
    WHERE        (CPF = G.CPF ))As Qtd_Alunos,
    (SELECT        COUNT(SchoolID) AS Valor
    FROM            Ecoe.CandudateUnits
    WHERE        (CPF = G.CPF ))As Unidades,
    (SELECT        SUM(Value) AS Valor
    FROM            Ecoe.Rents
    WHERE        (CPF = G.CPF ))As Rents,
    (SELECT        COUNT(RentsID) AS ID
    FROM            Ecoe.Rents
    WHERE        (CPF = G.CPF))As Total,
    (SELECT        SUM(Value) AS Despesas
    FROM            Ecoe.Expenses
    WHERE        (CPF = G.CPF))As tDespesas,
    
    --DECLARE @CD_CPF bigint = 342199609
    (SELECT G.CPF, 
    CONVERT(varchar, 
    (select SchoolID + ' ' FROM Ecoe.CandudateUnits WHERE CPF = G.CPF FOR XML PATH (''))
    ) AS es)AS Escolas
    
    FROM            Ecoe.Guardian AS G 
     
    ORDER BY G.CPF


    Moizés Cerqueira | MCP / MCTS SQL SERVER

    Moizés,

    Segue um script T-SQL reaproveitando todos os CPF´s para uma subquery, assim você adaptar à sua consulta:

    DECLARE @Candidatos TABLE (
        CPF    varchar(14), 
        School varchar(5)
    )
    
    INSERT INTO @Candidatos VALUES
    ('342199609','1501'),
    ('342199609','1801'),
    ('342199609','2701'),
    ('123456789','1111'),
    ('123456789','1234'),
    ('342199609','5701');
    
    SELECT DISTINCT TBL.CPF, 
    CONVERT(varchar, 
    (select School + ' ' FROM @Candidatos WHERE CPF = TBL.CPF FOR XML PATH (''))
    ) from @Candidatos as TBL;

    Segue abaixo a evidência do teste:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 16 de outubro de 2014 17:46
    Moderador
  • Moizes,

    Segue abaixo um script T-SQL para você adaptar às suas necessidades.

    DECLARE @Candidatos TABLE (
        CPF    varchar(14), 
        School varchar(5)
    )
     
    INSERT INTO @Candidatos VALUES
    ('342199609','1501'),
    ('342199609','1801'),
    ('342199609','2701'),
    ('123456789','1111'),
    ('123456789','1234'),
    ('342199609','5701');
    
    SELECT * FROM @Candidatos
    
    DECLARE @CD_CPF VARCHAR(14) = '342199609'
    SELECT @CD_CPF AS CPF, 
    CONVERT(varchar, 
    (select School + ' ' FROM @Candidatos WHERE CPF = @CD_CPF FOR XML PATH (''))
    ) AS Escolas;

    Segue a evidência de teste:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 16 de outubro de 2014 01:49
    Moderador

Todas as Respostas

  • quarta-feira, 15 de outubro de 2014 23:22
  • Usa o PIVOT
    quarta-feira, 15 de outubro de 2014 23:36
  • Moizes,

    Segue abaixo um script T-SQL para você adaptar às suas necessidades.

    DECLARE @Candidatos TABLE (
        CPF    varchar(14), 
        School varchar(5)
    )
     
    INSERT INTO @Candidatos VALUES
    ('342199609','1501'),
    ('342199609','1801'),
    ('342199609','2701'),
    ('123456789','1111'),
    ('123456789','1234'),
    ('342199609','5701');
    
    SELECT * FROM @Candidatos
    
    DECLARE @CD_CPF VARCHAR(14) = '342199609'
    SELECT @CD_CPF AS CPF, 
    CONVERT(varchar, 
    (select School + ' ' FROM @Candidatos WHERE CPF = @CD_CPF FOR XML PATH (''))
    ) AS Escolas;

    Segue a evidência de teste:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 16 de outubro de 2014 01:49
    Moderador
  • Roberto, desta forma funcionou a tendeu perfeitamente.

    Agora minha dúvida é como usar isso em um sub select.

    Tipo:

    (SELECT        COUNT(CandidateID) AS Valor
    FROM            Ecoe.Candidate
    WHERE        (CPF = G.CPF ))As Qtd_Alunos,
    (SELECT        COUNT(SchoolID) AS Valor
    FROM            Ecoe.CandudateUnits
    WHERE        (CPF = G.CPF ))As Unidades,
    (SELECT        SUM(Value) AS Valor
    FROM            Ecoe.Rents
    WHERE        (CPF = G.CPF ))As Rents,
    (SELECT        COUNT(RentsID) AS ID
    FROM            Ecoe.Rents
    WHERE        (CPF = G.CPF))As Total,
    (SELECT        SUM(Value) AS Despesas
    FROM            Ecoe.Expenses
    WHERE        (CPF = G.CPF))As tDespesas,
    
    --DECLARE @CD_CPF bigint = 342199609
    (SELECT G.CPF, 
    CONVERT(varchar, 
    (select SchoolID + ' ' FROM Ecoe.CandudateUnits WHERE CPF = G.CPF FOR XML PATH (''))
    ) AS es)AS Escolas
    
    FROM            Ecoe.Guardian AS G 
     
    ORDER BY G.CPF


    Moizés Cerqueira | MCP / MCTS SQL SERVER

    quinta-feira, 16 de outubro de 2014 16:44
  • Roberto, desta forma funcionou a tendeu perfeitamente.

    Agora minha dúvida é como usar isso em um sub select.

    Tipo:

    (SELECT        COUNT(CandidateID) AS Valor
    FROM            Ecoe.Candidate
    WHERE        (CPF = G.CPF ))As Qtd_Alunos,
    (SELECT        COUNT(SchoolID) AS Valor
    FROM            Ecoe.CandudateUnits
    WHERE        (CPF = G.CPF ))As Unidades,
    (SELECT        SUM(Value) AS Valor
    FROM            Ecoe.Rents
    WHERE        (CPF = G.CPF ))As Rents,
    (SELECT        COUNT(RentsID) AS ID
    FROM            Ecoe.Rents
    WHERE        (CPF = G.CPF))As Total,
    (SELECT        SUM(Value) AS Despesas
    FROM            Ecoe.Expenses
    WHERE        (CPF = G.CPF))As tDespesas,
    
    --DECLARE @CD_CPF bigint = 342199609
    (SELECT G.CPF, 
    CONVERT(varchar, 
    (select SchoolID + ' ' FROM Ecoe.CandudateUnits WHERE CPF = G.CPF FOR XML PATH (''))
    ) AS es)AS Escolas
    
    FROM            Ecoe.Guardian AS G 
     
    ORDER BY G.CPF


    Moizés Cerqueira | MCP / MCTS SQL SERVER

    Moizés,

    Segue um script T-SQL reaproveitando todos os CPF´s para uma subquery, assim você adaptar à sua consulta:

    DECLARE @Candidatos TABLE (
        CPF    varchar(14), 
        School varchar(5)
    )
    
    INSERT INTO @Candidatos VALUES
    ('342199609','1501'),
    ('342199609','1801'),
    ('342199609','2701'),
    ('123456789','1111'),
    ('123456789','1234'),
    ('342199609','5701');
    
    SELECT DISTINCT TBL.CPF, 
    CONVERT(varchar, 
    (select School + ' ' FROM @Candidatos WHERE CPF = TBL.CPF FOR XML PATH (''))
    ) from @Candidatos as TBL;

    Segue abaixo a evidência do teste:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 16 de outubro de 2014 17:46
    Moderador