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 

Dúvida SQL (MySQL)
Ir à página Anterior  1, 2
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
imex
Moderador
Moderador


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

MensagemEnviada: Seg Ago 06, 2018 5:16 pm    Assunto: Responder com Citação

Fiquei com dúvidas sobre a questão, mas segue uma versão da query que talvez possa ser aprimorada para chegar ao resultado esperado:

Código:
select
    a.Cod,
    a.CodDetMov as CodDetMovA,
    a.QtdComp as QtdCompA,
    b.CodDetMov as CodDetMovB,
    b.QtdComp as QtdCompB
from
(
    select
        m.Cod,
        d.Cod as CodDetMov,
        count(*) as QtdComp,
        @Linha:=case when @CodAntA = m.Cod then @Linha + 1 else 1 end as Linha,
        @CodAntA:=m.Cod 
    from (SELECT @CodAntA:=0,@Linha:=0) as t, Movimento as m
    inner join DetMovimento as d
        on d.CodMov = m.Cod
    inner join DetComplemento as c
        on c.CodDetMov = d.Cod
    where
        d.CodProd = 10 and
        d.Promocao = 'S'
    group by
        m.Cod,
        d.Cod
) a
inner join
(
    select
        m.Cod,
        d.Cod as CodDetMov,
        count(*) as QtdComp,
        @Linha:=case when @CodAntB = m.Cod then @Linha + 1 else 1 end as Linha,
        @CodAntB:=m.Cod
    from (SELECT @CodAntB:=0,@Linha:=0) as t, Movimento as m
    inner join DetMovimento as d
        on d.CodMov = m.Cod
    inner join DetComplemento as c
        on c.CodDetMov = d.Cod
    where
        d.CodProd = 20 and
        d.Promocao = 'S'
    group by
        m.Cod,
        d.Cod
) b
    on b.Cod = a.Cod and b.Linha = a.Linha


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Seg Ago 06, 2018 6:32 pm    Assunto: Responder com Citação

estamos quase lá, só preciso que saia na mesma linha o CODDETMOVA + QtdCompA + CODDETMOVB + QtdCompB somente se alguma das quantidades for maior q 1

imex escreveu:
Fiquei com dúvidas sobre a questão, mas segue uma versão da query que talvez possa ser aprimorada para chegar ao resultado esperado:

Código:
select
    a.Cod,
    a.CodDetMov as CodDetMovA,
    a.QtdComp as QtdCompA,
    b.CodDetMov as CodDetMovB,
    b.QtdComp as QtdCompB
from
(
    select
        m.Cod,
        d.Cod as CodDetMov,
        count(*) as QtdComp,
        @Linha:=case when @CodAntA = m.Cod then @Linha + 1 else 1 end as Linha,
        @CodAntA:=m.Cod 
    from (SELECT @CodAntA:=0,@Linha:=0) as t, Movimento as m
    inner join DetMovimento as d
        on d.CodMov = m.Cod
    inner join DetComplemento as c
        on c.CodDetMov = d.Cod
    where
        d.CodProd = 10 and
        d.Promocao = 'S'
    group by
        m.Cod,
        d.Cod
) a
inner join
(
    select
        m.Cod,
        d.Cod as CodDetMov,
        count(*) as QtdComp,
        @Linha:=case when @CodAntB = m.Cod then @Linha + 1 else 1 end as Linha,
        @CodAntB:=m.Cod
    from (SELECT @CodAntB:=0,@Linha:=0) as t, Movimento as m
    inner join DetMovimento as d
        on d.CodMov = m.Cod
    inner join DetComplemento as c
        on c.CodDetMov = d.Cod
    where
        d.CodProd = 20 and
        d.Promocao = 'S'
    group by
        m.Cod,
        d.Cod
) b
    on b.Cod = a.Cod and b.Linha = a.Linha


Espero que ajude
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: Ter Ago 07, 2018 11:18 am    Assunto: Responder com Citação

Experimente adicionar o Where no final:

Código:
where
    a.QtdComp > 1 or
    b.QtdComp > 1


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
Ir à página Anterior  1, 2
Página 2 de 2

 
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