[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