MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Concatenar em uma consulta valores de linhas diferentes

    Compartilhe

    Amanda_babi
    Novato
    Novato

    Respeito às Regras 100%

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

    Concatenar em uma consulta valores de linhas diferentes

    Mensagem  Amanda_babi em 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!
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Concatenar em uma consulta valores de linhas diferentes

    Mensagem  Alexandre Neves em 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: 17/11/2018, 03:02