[firebase-br] SQL Muito complicado de Fazer "Linhas em Colunas"

Walter R. Ojeda Valiente sistemas2000profesional em gmail.com
Qui Abr 23 14:40:16 -03 2015


Una técnica para convertir filas en columnas puedes encontrar aquí:

https://firebird21.wordpress.com/2013/11/18/usando-una-cross-table/

Y si quieres leer todos los artículos relacionados, puedes entrar a este
enlace y allí buscar el título: *OLAP y OLTP*.

https://firebird21.wordpress.com/category/indice-de-este-blog/

Saludos.

Walter.


2015-04-22 22:38 GMT-04:00 Luciano franca <luapfirebird em yahoo.com.br>:

>
> Estou mandando o Mesmo Email pois o 1º perdeu a Formatação.
> Pessoal passei dia todo otimizando um SQL que está muito lento
> São duas Tabelas ::
> Cadastro_MercadoriasCadastro_Precos
>
> Na tabela tabela de "Cadastro_Precos"  pode se ter varios codigos PK da
> tabela "Cadastro_Mercadorias"
> Veja eu não posso usar  "Sub-Select"   pois o carregamento da Query Fica
> muito lento  então devo fazer Case para Fazer Linhas Virar Colunas
> Usando esse Primeiro Código
> SELECT   Cm.codigo,
>    CM.mercadoria,
>    GP.Descricao
>
>  , (Max(Case  When (GP.Cod_Nome_Precos is Not Null And GP.Cod_Nome_Precos
> = '1') Then
>   GP.PRECO_VENDA End)) As VENDA_VISTA
>
>  , (Max(Case  When (GP.Cod_Nome_Precos is Not Null And GP.Cod_Nome_Precos
> = '2') Then
>   GP.PRECO_VENDA End)) As VENDA_PRAZO
>
> FROM  cadastro_mercadorias Cm
>
> left join CADASTRO_PRECOS GP on (GP.Cod_produto = CM.Codigo)
> Group By 1, 2, 3
> Não traz os preços para algumas Colunas e Eu preciso dos Preços para todas
> Todas Colunas não pode ter colunas com valores Nulosé possivel ver isso na
> imagen  "SQL1.jpg"  que está no Link :
>
> https://mega.co.nz/#!U1xEDZjY!tbkoON2LIJzC_DBb87X0tQls-ABz3Y0GEqpeBa_uJgo
>
> Esse Segundo código funciona porém fica cerca de 60% mais lento por ter
> dois Left Join na Tabela  "Cadastro_Precos"
> Eu não consigo fazer com apenas um Left Join sem  "Sub-Select"   se algum
> colega tiver uma ideia melhor fico muito agradecido.
>
> SELECT   Cm.codigo,
>    CM.mercadoria,
>    GP.Descricao
>
>  , (Max(Case  When (GP.Cod_Nome_Precos is Not Null And GP.Cod_Nome_Precos
> = '1') Then
>   GP.PRECO_VENDA Else Case When (GP2.Cod_Nome_Precos is Not Null And
> GP2.Cod_Nome_Precos = '1') Then GP2.Preco_Venda End End)) As VENDA_VISTA
>
>  , (Max(Case  When (GP.Cod_Nome_Precos is Not Null And GP.Cod_Nome_Precos
> = '2') Then
>   GP.PRECO_VENDA Else Case When (GP2.Cod_Nome_Precos is Not Null And
> GP2.Cod_Nome_Precos = '2') Then GP2.Preco_Venda End End)) As VENDA_PRAZO
>
> FROM  cadastro_mercadorias Cm
>
> left join CADASTRO_PRECOS GP on (GP.Cod_produto = CM.Codigo)       left
> join CADASTRO_PRECOS GP2 on (GP2.Cod_produto = CM.Codigo)
>
> Group By 1, 2, 3
>
>
> Nesse Link  ::
> https://mega.co.nz/#!U1xEDZjY!tbkoON2LIJzC_DBb87X0tQls-ABz3Y0GEqpeBa_uJgo
>
> tem o Banco em FB 2.5  e também o Script para criar as tabelas e testar.
> Fico a Grato a Atenção dos Colegas.
> ______________________________________________
> 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