MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

2 participantes

    Concatenar em uma consulta valores de linhas diferentes

    avatar
    Amanda_babi
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 1
    Registrado : 24/10/2013

    Concatenar em uma consulta valores de linhas diferentes Empty Concatenar em uma consulta valores de linhas diferentes

    Mensagem  Amanda_babi 17/8/2018, 18:21

    Olá eu tenho a seguinte tabela (TABELA ESTOQUE CLIENTES):

    Cliente | Material | Estoque
    A | 52269769 | 3
    A | 52277980 | 1
    B | 15652862 | 12
    A | 90246867 | 4
    A | 90276394 | 2
    B | 22549794 | 13
    C | 52269769 | 1
    D | 52141918 | 1
    E | 90276394 | 1
    F | 15652862 | 2
    F | 52056319 | 1
    F | 90276394 | 2
    G | 52269769 | 1
    G | 90355366 | 2
    G | 90276394 | 1
    H | 15652862 | 1
    F | 52144820 | 3
    I | 52269769 | 4
    J | 90276394 | 3

    Preciso de uma consulta que retorne o seguinte exemplo de resultado:

    Material    | Estoque | Cliente
    52269769 | 9      | A;C;G;I


    Ou seja, que some o estoque total por material e concatene os clientes que possuem esse item.

    Alguém consegue por favor me ajudar?

    Tentei fazer criando a seguinte função:

    Public Function Concatenar(Origem As String, CampoChave As String, _
    CampoConcatenar As String, Chave As Integer) As String
       Dim db As Database
       Dim rs As Recordset
       Dim strSQL, strRetorno As String

       strSQL = "SELECT " & CampoChave & ", " & CampoConcatenar & " FROM " & Origem & _
       " WHERE ([" & CampoChave & "] = " & Chave & ")"
       
       Set db = CurrentDb()
       Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
       strRetorno = ""
       While Not rs.EOF
           strRetorno = strRetorno & rs(CampoConcatenar)
           rs.MoveNext
           If Not rs.EOF Then
               strRetorno = strRetorno & ", "
           End If
       Wend
       Concatenar = strRetorno
       rs.Close
    End Function

    Porém quando coloco na consulta da seguinte forma:

    SELECT Material, Sum(Estoque) AS Estoque, Concatenar("TABELA ESTOQUE CLIENTES","Material","Cliente",[Material]) as Consulta
    FROM TABELA ESTOQUE CLIENTES
    GROUP BY Material

    Dá erro =/

    Não sei o que fazer!
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8019
    Registrado : 05/11/2009

    Concatenar em uma consulta valores de linhas diferentes Empty Re: Concatenar em uma consulta valores de linhas diferentes

    Mensagem  Alexandre Neves 18/8/2018, 08:46

    Bom dia e bem-vinda ao fórum

    Sem dados não deu para testar, mas experimente este código

    Código:
    'Public Function Concatenar(CampoChave As String, CampoConcatenar As String) As String
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '   código criado por Alexandre Neves, do Fórum MaximoAccess   '
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim rs As DAO.Recordset, strSQL As String
        
        If CampoConcatenar = "Estoque" Then
            Set rs = CurrentDb.OpenRecordset("SELECT Sum(Estoque) FROM [TABELA ESTOQUE CLIENTES] WHERE Material='" & CampoChave & "'")
            Concatenar = rs(0)
        Else
            Set rs = CurrentDb.OpenRecordset("SELECT Cliente FROM [TABELA ESTOQUE CLIENTES] WHERE Material='" & CampoChave & "'")
            Do While Not rs.EOF
                If rs.AbsolutePosition = 0 Then
                    Concatenar = rs(0)
                Else
                    Concatenar = Concatenar & "," & rs(0)
                End If
                rs.MoveNext
            Loop
        End If
        rs.Close: set rs = Nothing
    End Function

    Na consulta chame
    SELECT DISTINCT Material, Concatenar(Material,Estoque) as Estoque, Concatenar(Material,Cliente) as Cliente FROM [TABELA ESTOQUE CLIENTES]


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: 18/9/2021, 23:35