[firebase-br] Ajuda com SQL 1/2 OFF-TOPIC ?

Wilson Rosa wsrosa em gmail.com
Qui Mar 22 10:24:23 -03 2012


Olá Sávio,

Tem sim, a partir do Firebird 2.1 pode-se usar a função agregada LIST() que
monta uma lista do campo informado:

SELECT

    c.ID_CLIENTE,

    c.NOME,

    LIST( f.TELEFONE ) as TELEFONES,

    LIST( e.ENDERECO, ascii_char(13) ) as ENDEREÇOS,

    LIST( d.DEPENDENTE, ' e ' ) as DEPENDENTES

FROM

    TBCLIENTE c

    INNER JOIN TBFONES                f ON ( f.ID_CLIENTE = c.ID_CLIENTE )

    INNER JOIN TBENDERECOS     e ON ( e.ID_CLIENTE = c.ID_CLIENTE )

    INNER JOIN TBDEPENDENTES d ON ( d.ID_CLIENTE = c.ID_CLIENTE )

GROUP BY

    c.ID_CLIENTE,

    c.NOME


O 2º parâmetro do LIST() é o separador de campos, note que no Endereço foi
usado ascii_char(13), que separa/quebra o conteúdo do campo em linha(s), ou
seja, o visual ficará mais "limpo" mas para visualizar todos os dados neste
campo é necessário aumentar a altura da linha para conseguir ver os
endereços que estão abaixo do 1º e dentro do mesmo campo.

Espero que isso te ajude.


*Wilson Rosa
wsrosa em gmail.com
*
Desenvolvedor Desk



Em 21 de março de 2012 15:32, Sávio Assunção <
savio_assuncao em pontodigital.eti.br> escreveu:

> Ola Pessoal ,
>
>
>
> Preciso importar dados de um banco de dados FB tb , que esta normalizado
> assim :
>
>
>
>   Tbcliente : id_cliente  , nome
>
>               tbFones : id_cliente , telefone
>
>               tbEnderecos: id_cliente , endereço
>
>               tbDependentes : id_cliente , dependente
>
>
>
>  Como consigo extrair numa mesma linha os dados das tabelas (
> tbfones,tbEnderecos,tbDependentes) quando houver + de um relacionamento
> entre elas e
>
>  A tbCliente:
>
>
>
>  Se eu fizer
>
>
>
>   SELECT  C.ID_CLIENTE,
>
>                 C.NOME,
>
>                 TBFONES.TELEFONE,
>
>                 TBENDERECOS.ENDERECO,
>
>                 TBDEPENDENTES.DEPENDENTE
>
>   FROM TBCLIENTE C
>
>   INNER JOIN TBFONES ON TBFONES.ID_CLIENTE=C.ID_CLIENTE
>
>   INNER JOIN TBENDERECOS ON TBENDERECOS.ID_CLIENTE=C.ID_CLIENTE
>
>   INNER JOIN TBDEPENDENTES ON TBDEPENDENTES.ID_CLIENTE=C.ID_CLIENTE
>
>
>
>   Daí vai retornar + de uma linha se houver + de 1 relacionamento (
> c.id_cliente -> tbfones.id_cliente ) por exemplo.
>
>         ID_CLIENTE    NOME     TELEFONE
>
>          1                    JOSE      34513394
>
>          1                    JOSE      99872131
>
>
>
>   Tem como retornar na mesma linha ?
>
>
>
> Sávio Assunção
>
> www.pontodigital.eti.br
> Delphi 6 + FB2.1 + Debian 4
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista