locked
Consultas com concatenação de Strings RRS feed

  • Pergunta

  •  

    Boa tarde, pessoal!

     

    Estou com um problema. Vou simplificar pra ver se alguém pode me ajudar. Suponhamos as seguintes tabelas:

     

    PESSOA

    - id_pessoa

    - nome_pessoa

     

    INFORMACAO

    - id_informacao

    - descricao

     

    PESSOA_REL_INFORMACAO

    - id_pessoa

    - id_informacao

     

    A última tabela serve para armazenar o relacionamento N x N entre pessoas e informações.

    O que eu preciso se parece com um função de agregação SQL, mas não com operação sobre números, e sim sobre o texto! Eu quero que, dado um id_informacao qualquer, a consulta me devolva em um único registro, a concatenação de todos nome_pessoa que tem seu id_pessoa na tabela PESSOA_REL_INFORMACAO com o id_informacao dado.

     

    Exemplo:

     

    PESSOA

    id_pessoa              nome_pessoa

    1                           Felipe

    2                           João

    3                           Marcos

     

    INFORMACAO

    id_informacao         descricao

    1                            informação 1

    2                            informação 2

    3                            informação 3

     

    PESSOA_REL_INFORMACAO

    id_pessoa              id_informacao

    1                           2

    2                           2

     

    No exemplo acima a questão seria: Quais as pessoas relacionadas com a informação cujo id é 2?

    A consulta deveria me responder:

    "Felipe, João"

     

    Alguém sabe como fazer isso???

     

     

    Valeu!!!

     

    Felipe

    sexta-feira, 9 de novembro de 2007 18:12

Todas as Respostas

  •  

    Bülle, no MSAccess, crie uma Function que retorne concatenado..

     

    segue exemplo:

     

    Public Function BuscaPessoas(intIDInformacao) As String
    Dim rsPessoas As recordset
    Dim strSQL As String, strRetorno As String

        sql = "select p.nome_pessoa from PESSOA_REL_INFORMACAO pi inner join pessoa p on pi.id_pessoa = p.id_pessoa where pi.id_informacao=" & intIDInformacao

        Set rsPessoas = suaConexao.OpenRecordset(strSQL, dbOpenSnapshot)

        strRetorno = ""
        While Not rec.EOF
            strRetorno = strRetorno & rsPessoas("nome_pessoa")
            rsPessoas.MoveNext
            If Not rsPessoas.EOF Then
                strRetorno = strRetorno & ", "
            End If
        Wend
        BuscaPessoas = strRetorno
        rsPessoas.Close
    End Function

     

     

    Qquer coisa, retorne.

    Abraço!

    sexta-feira, 9 de novembro de 2007 21:44
  • Oi Douglas!

     

    Valeu pela ajuda, mas já está implementado da forma que você sugeriu! Eu queria saber se dava pra fazer por consultas porque o processamento ficaria muito mais rápido, uma vez que isso será utilizado em um relatório. Será que não tem jeito mesmo de fazer isso com algum tipo de instrução SQL?

     

    Abraços!

    segunda-feira, 12 de novembro de 2007 16:27
  • Olá,

     

    você consegue concatenar campos, não registros.

     

    Para concatenar registros precisa fazer um loop linha a linha.

     

    segunda-feira, 12 de novembro de 2007 23:50
    Moderador