[firebase-br] RES: RES: Campos dinamicos

Renato Felix de Almeida renatofelixalmeida em gmail.com
Qua Jan 8 17:15:32 -03 2020


Acredito que dentro da necessidade do nosso colega o conceito EAV não seria
a melhor opção, acredito que ele quer uma consulta que apresente o seguinte
resultado:

Vendedor Janeiro Fevereiro Março Abril
Renato 2.190,00 1.244,10 9.832,00 1.234,00
Marcos 1.353,00 3.453,00 2.354,00 3.232,00
Antônio 6.343,00 5.467,00 6.572,00 3.232,00
Roberto 3.443,00 9.834,00 3.442,00 3.233,00
Se for isso EAV na minha opinião não é a melhor abordagem.

Ps. Na gambiarra cruzada apresentada anteriormente para colocar a venda por
vendedor bastaria agrupar pelo campo.

select
vendedor,
sum(case when data_venda between '1.1.2019' and '31.1.2019' then
valor_venda else 0 end) as JANEIRO,
sum(case when data_venda between '1.2.2019' and '28.2.2019' then
valor_venda else 0 end) as FEVEREIRO,
sum(case when data_venda between '1.3.2019' and '31.3.2019' then
valor_venda else 0 end) as MARCO,
sum(case when data_venda between '1.4.2019' and '30.4.2019' then
valor_venda else 0 end) as ABRIL
from vendas
group by vendedor


Em qua., 8 de jan. de 2020 às 16:56, Rubem Nascimento da Rocha <
djpardalrocha em hotmail.com> escreveu:

> O artigo abaixo mostra o básico de uma implementação de EAV com SQL
> Server. Nada impede que possa usar o que é abordado no artigo com outros
> RDBMS, como o caso do FireBird.
>
>
> https://blog.greglow.com/2018/02/12/sql-design-entity-attribute-value-tables-part-1/
>
> Boa sorte!
>
> Enviado do Email<https://go.microsoft.com/fwlink/?LinkId=550986> para
> Windows 10
>
> De: Renato Felix de Almeida<mailto:renatofelixalmeida em gmail.com>
> Enviado:quarta-feira, 8 de janeiro de 2020 15:51
> Para: FireBase<mailto:lista em firebase.com.br>
> Assunto: Re: [firebase-br] RES: Campos dinamicos
>
> Acho que no sql server tem a consulta cruzada que faz isso. No firebird e
> outros bancos você pode simular esse comportamento utilizando a clausula
> case juntamente com as consultas agrupadas.
>
> Segue abaixo um exemplo:
>
> select
> sum(case when data_venda between '1.1.2019' and '31.1.2019' then
> valor_venda else 0 end) as JANEIRO,
> sum(case when data_venda between '1.2.2019' and '28.2.2019' then
> valor_venda else 0 end) as FEVEREIRO
> sum(case when data_venda between '1.3.2019' and '31.3.2019' then
> valor_venda else 0 end) as MARCO,
> sum(case when data_venda between '1.4.2019' and '30.4.2019' then
> valor_venda else 0 end) as ABRIL
> from vendas
>
> Neste caso para cada coluna ele avalia se a data está no período desejado,
> caso sim retorna o valor da venda, caso não retorna 0, com o comando sum
> ele vai somar os valores retornados. Não é a melhor forma de fazer, a
> consulta cruzada no SQL Server é ótima, mas o bacana é que isso funciona em
> todos os bancos que já testei, inclusive no sql server.
>
>
> Em qua., 8 de jan. de 2020 às 16:42, Rubem Nascimento da Rocha <
> djpardalrocha em hotmail.com> escreveu:
>
> > Pesquise sobre a abordagem EAV (Entity Attribute Value) e veja se  existe
> > alguma implementação voltada para FireBird!
> >
> > Boa sorte!
> >
> > Enviado do Email<https://go.microsoft.com/fwlink/?LinkId=550986> para
> > Windows 10
> >
> > De: rafael em sxti.com.br<mailto:rafael em sxti.com.br>
> > Enviado:quarta-feira, 8 de janeiro de 2020 14:24
> > Para: lista em firebase.com.br<mailto:lista em firebase.com.br>
> > Assunto: [firebase-br] Campos dinamicos
> >
> > Prezados,
> >
> > Existe alguma forma no firebird de criar colunas/campos dinamicamente??
> >
> > Ex: Seleciono um período de vendas, mes 01 ao mes 04 de 2019,
> > exibirá colunas MES01, MES02, MES03, MES04 e abaixo delas a qtde de
> vendas
> > de determinados produtos.
> >
> > Resumindo, criar as colunas de acordo com o filtro do período informado.
> >
> >
> > Rafael Voltani
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br<http://www.firebase.com.br<
> http://www.firebase.com.br%3chttp:/www.firebase.com.br>>) - Hospedado
> > em www.locador.com.br<http://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://www.firebase.com.br/pesquisa_lista.html
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br<http://www.firebase.com.br>) -
> Hospedado em www.locador.com.br<http://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://www.firebase.com.br/pesquisa_lista.html
> >
>
>
> --
> Renato
> renatofelixalmeida em gmail.com
> ______________________________________________
> FireBase-BR (www.firebase.com.br<http://www.firebase.com.br>) - Hospedado
> em www.locador.com.br<http://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://www.firebase.com.br/pesquisa_lista.html
>
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>


-- 
Renato
renatofelixalmeida em gmail.com



Mais detalhes sobre a lista de discussão lista