RES: [firebase-br] Cross Table alguém tem alguma experiência?

edcley edcley em eletroacre.com.br
Qua Nov 22 16:08:34 -03 2006


Concordo com vc, mas vc pode montar uma sp que faça o carregamento dessas
colunas

edcley

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Ton - Hotmail
Enviada em: quarta-feira, 22 de novembro de 2006 10:30
Para: 'FireBase'
Assunto: RES: [firebase-br] Cross Table alguém tem alguma experiência?

   É uma boa saída, mas quando vc tem um universo limitado e de preferência
pequeno de dados que podem virar Colunas. Imagine fazer um cruzamenteo desse
tipo para uma lista cruzada de vendas por produtos de um supermercado médio?

   O correto seria fazer como o Access e o SQLServer (Citei os dois pq sei
que tem) fazem com um comando chamado PIVO e outro Transform, onde vc fixa
um campo para ser coluna e define os dados a serem exibidos no cruzamento.

   FB não tem isso, e não é nenhum desmerecimento, até pq o próprio Oracle
não tem, em Oracle é usado uma Package com funções que criam esse tipo de
tabela de referência cruzada.

   Se for um select com universo limitado, a solução apresentada é ótima, e
resolve perfeitamente, mas para soluções mais flexíveis, isso complica um
pouco. Mesmo que a aplicação consiga criar o select automaticamente, o banco
seria bem carregado por uma infinidade de SubSelects.

   Existem componentes, inclusive nativos do próprio Delphi (Decision Cube)
que fazem esse cruzamento. Dá uma olhada na Decision Grid, ela faz o
cruzamento de forma bem flexível.

        Ton
Analista de Sistemas
 DotCom Informática
 
"A infrmação não é um produto,
e sim a matéria prima." (Ton)
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de edcley em eletroacre.com.br
Enviada em: quarta-feira, 22 de novembro de 2006 10:59
Para: FireBase
Assunto: Re: [firebase-br] Cross Table alguém tem alguma experiência?

camarada esse seria  um exemplo de como fazer um cross com sql simples
esse select traz a média de todos os alunos de uma determinada turma no ano
de 2006, detalhe ele traz as disciplinas como colunas e as médias como
linhas, explicando melhor, esse subselect (SELECT MEDIA FROM NOTA WHERE 
NOTA.IDMATRICULA = MATRICULA.IDMATRICULA AND IDDISCIPLINA =2) AS
MATEMATICA, retorna a média da disciplina matemática do aluno em questão
como faço a ligação? simples ligo o idmatricula deste subselect com o
idmatricula do select principal





espero ter ajudado

edcley


SELECT NOMEALUNO,MATRICULA.IDTURMA,
CASE SITUACAO
WHEN 'APROVADO' THEN 'AP'
WHEN 'REPROVADO' THEN 'RP'
WHEN 'FINAL'   THEN 'FN'
WHEN 'DESISTENTE'THEN 'DE'
ELSE 'NA' END AS SITUACAO,
(SELECT CASE SITUACAO WHEN 'APROVADO' THEN 'N' ELSE 'R' END AS SITUACAO
FROM matriculados  WHERE matriculados.IDALUNO= matricula.IDALUNO AND
MATRICULADOS.ANOLETIVO = VANOLETIVO -1 ) as RN,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =2) AS MATEMATICA,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =4) AS GEOGRAFIA,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =5) AS HISTORIA,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =9) AS ARTES,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =10) AS EDUCACAO_FISICA,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =12) AS CIENCIAS,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =23) AS INGLES,
(SELECT MEDIA FROM NOTA WHERE  NOTA.IDMATRICULA = MATRICULA.IDMATRICULA
AND IDDISCIPLINA =24) AS PORTUGUES

FROM ALUNO INNER JOIN `matricula` ON (MATRICULA.IDALUNO = ALUNO.IDALUNO)
WHERE IDTURMA = 1 AND MATRICULA.ANOLETIVO = 2006












> Obrigado, Jeferson,
> pela boa explicação.
> []´s
> Otto
> ----- Original Message -----
> From: "Jeferson Oliveira" <jefersonfoliveira em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, November 22, 2006 10:03 AM
> Subject: Re: [firebase-br] Cross Table alguém tem alguma experiência?
>
>
> Otto Fuchshuber escreveu:
>> O que é cross-table?
>
> É o nome muitas vezes dado à visão horizontal de uma estrutura de
> dados vertical; à exibição de identificadores de linhas como
> identificadores de colunas, como exemplificado no post original do
> colega Fausto.
>
> Eu sempre que precisei resolvi por SQL ou, em casos mais complexos, por
> SP.
> Não precisei de componentes de terceiros para isso, embora reconheça
> que eles podem simplificar bastante essa tarefa.
>
>
> Abraço!
> Jeferson Oliveira
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> Esta mensagem foi verificada pelo E-mail Protegido Terra.
> Scan engine: McAfee VirusScan / Atualizado em 21/11/2006 / Versão:
> 4.4.00/4901
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.409 / Virus Database: 268.14.13/546 - Release Date: 22/11/2006






Mais detalhes sobre a lista de discussão lista