ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Select no Firebird com problemas

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
valmirluis42
Novato
Novato


Registrado: Segunda-Feira, 17 de Agosto de 2015
Mensagens: 60

MensagemEnviada: Qua Jan 30, 2019 11:52 am    Assunto: Select no Firebird com problemas Responder com Citação

Tenho um select no SQl server que é o seguinte:
Código:
with
CTE_Sum as
(
SELECT
W.codigomaterial,
sum(w.QUANTIDADE) as Quantidade,
sum(w.totalliquido) as total_vendas,
sum(w.quantidade * v.ultimocustocalculado1) as total_liquido
from MOVIMENTOITEM as w inner join MATERIALALMOXARIFADO AS V ON W.codigomaterial=V.codigomaterial
where v.CODIGOALMOXARIFADO='1001' and w.DATA between'01-03-2018' and '01-12-2018'and w.CODIGOTABELAPRECO in ('01001','01002','01003','01004') AND V.IDENTIFICADOR='A' AND  W.SISTEMAORIGEM='BAL' and codigotabela1 is null AND W.CODIGOMATERIAL LIKE '9900%'
group by
W.CODIGOMATERIAL
),

CTE_RN as
(
SELECT
codigomaterial,
Quantidade,
total_liquido,
total_vendas,
total_vendas / sum(total_vendas) over() * 100 as Representatividade,
ROW_NUMBER() OVER(ORDER BY total_vendas DESC) as RN
FROM CTE_Sum
)

select
ROW_NUMBER() OVER (ORDER BY e.RN) AS Sequencia,
i.codigomaterial,
i.codigoauxiliar,
i.descricao,
i.percmargem,
i.status,
e.Quantidade,
e.total_liquido,
e.total_vendas,
e.Representatividade,
(select sum(s.Representatividade) from CTE_RN s
where s.RN <= e.RN) as ReprAcum
from cadmaterial i
INNER JOIN CTE_RN e
ON i.CODIGOMATERIAL = e.codigomaterial
where i.TIPO='m'
order by e.RN


Estou tentando montar no Firebird 2.5 o mesmo sql dessa maneira
Código:
with
CTE_SUM AS
(SELECT
W.cod_produto,
sum(w.Qtde) as Quantidade,
sum(w.vl_total) as total_vendas,
sum(w.qtde * v.vl_custo) as total_liquido
from venda_produto as w inner join produto_custo AS V ON W.cod_produto=V.cod_produto
inner join venda as e on w.cod_venda=e.cod_venda
where (dt_emissao Between ('01.12.2018') And ('31.12.2018'))
group by
W.COD_produto ),
CTE_RN as
( SELECT
W.cod_produto,
Quantidade,
total_vendas,
total_liquido,
total_vendas/ sum(total_vendas) over() * 100 as Representatividade,
from CTE_Sum
)
select
i.cod_produto,
i.descricao,
f.qtde,
f.total_liquido,
f.total_vendas,
f.representatividade,
(select sum(s.representatividade) from CTE_RN s where s.rn <= f.RN )as ReprAcum
from produto i inner join CTE_RN f
on i.cod_produto = f.cod_produto
order by f.RN


O problema é que o over no firebird não funciona, tem que ser o RDB$DB_KEY ou é outra função?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Jan 30, 2019 2:47 pm    Assunto: Responder com Citação

Boa tarde,

Acredito que a função Row_Number foi adicionada apenas no Firebird 3.0. Confira a página abaixo que parece ter algumas alternativas para a versão 2.5:
http://www.firebirdfaq.org/faq343/

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB