none
CRIAR CONSULTA POR PERÍODO RRS feed

  • Pergunta

  • O QUE EU COLOCO NA CONSULTA NO NOT EXISTS, POR EXEMPLO DE '20081201' A '20081231', MAS QUANDO EU COLOCO COM NOT BETWEEN, O VALOR SAI DIFERENTE. ALGUÉM PODE AJUDAR??

     

    SELECT       day(TBVP.DataVendaPedido) AS DATA,

    TBVP.idEmpresaFilial,
      count(distinct TBVP.idcliente)

    FROM tbVendaPedido TBVP

     

    INNER JOIN tbVendaPedidoItem TBVPI
    ON TBVPI.NumeroPedido = TBVP.NumeroPedido

     

    WHERE TBVP.idEmpresa   = 1
    AND  TBVP.idEmpresaFilial IN(3,4)
    AND  TBVP.idSituacao   = 4
    AND  convert(char(8),TBVP.DataVendaPedido,112)  = '20080714'
    AND  TBVPI.idProduto   = 'VIVO6'

     

    AND NOT EXISTS(select TBX.idCliente 
                                from tbVendaPedido TBX
                               

     inner join tbVendaPedidoItem TBY
     on TBY.NumeroPedido = TBX.NumeroPedido
     inner join tbProduto TBZ
     on TBZ.idEmpresa  = TBY.idEmpresa
     and TBZ.idProduto  = TBY.idProduto
     where TBX.idSituacao = 4
     and  convert(char(8),TBX.DataVendaPedido,112) < '20080714'
     and  TBZ.idProdutoLinha IN(5,39)
     and  TBX.idCliente = TBVP.idCLiente)

     

    GROUP BY TBVP.idEmpresaFilial, TBVP.DataVendaPedido

     

     

    CONSULTA QUE EU FIZ, MAS HÁ DIVERGÊNCIA NOS VALORES.

     

    SELECT        TBVP.idEmpresaFilial,

     day(TBVP.DataVendaPedido) AS DATA,
      COUNT(DISTINCT TBVP.idcliente)

     

    FROM tbVendaPedido TBVP

     

    INNER JOIN tbVendaPedidoItem TBVPI
    ON TBVPI.NumeroPedido = TBVP.NumeroPedido

     

    WHERE TBVP.idEmpresa   = 1
    AND  TBVP.idEmpresaFilial IN(3,4)
    AND  TBVP.idSituacao   = 4
    AND  convert(char(8),TBVP.DataVendaPedido,112)  between '20081201' and '20081231'
    AND  TBVPI.idProduto   = 'VIVO6'


    AND NOT EXISTS(select TBX.idCliente
        from tbVendaPedido TBX
        inner join tbVendaPedidoItem TBY
        on TBY.NumeroPedido = TBX.NumeroPedido
        inner join tbProduto TBZ
        on TBZ.idEmpresa  = TBY.idEmpresa
        and TBZ.idProduto  = TBY.idProduto
        where TBX.idSituacao = 4
        and  convert(char(8),TBX.DataVendaPedido,112) < '20081201'
        and  TBZ.idProdutoLinha IN(5,39)
        and  TBX.idCliente = TBVP.idCLiente)

     

    GROUP BY TBVP.DataVendaPedido,TBVP.idEmpresaFilial

    ORDER BY DATA

    segunda-feira, 5 de janeiro de 2009 20:09

Todas as Respostas

  • Rafael,

     

    Primeiramente, seja bem vindo ao fórum, esperamos poder ajudar da melhor forma possível de acordo com o nosso conhecimento e disponibilidade de tempo, faça parte desta grande comunidade contribuindo com suas dúvidas, informações, conhecimento, nos ajudando a transformar este fórum em uma grande fonte de aprendizagem.

     

    Em relação a sua dúvida, o que exatamente você deseja fazer?

     

    Por que em alguns momentos utilizou o Not Between ou o Not Exists?

    terça-feira, 6 de janeiro de 2009 13:09
  •  

    Deixa eu explicar de uma forma mais clara.

     

    No script logo abaixo quero saber todos os clientes novos que o compraram num determinado dia o produto "VIVO6".

    Esse script está funcionando perfeitamente.

     

    SELECT              TBVP.idEmpresaFilial,
                              count(distinct TBVP.idcliente)

    FROM tbVendaPedido TBVP

     

    INNER JOIN tbVendaPedidoItem TBVPI
    ON TBVPI.NumeroPedido = TBVP.NumeroPedido

     

    WHERE          TBVP.idEmpresa   = 1
                  AND  TBVP.idEmpresaFilial = 3
                 AND  TBVP.idSituacao   = 4
                 AND  convert(char(8),TBVP.DataVendaPedido,112)  = '20081201'
                 AND  TBVPI.idProduto   = 'VIVO6'
                 AND NOT EXISTS(select TBX.idCliente 
                                            from tbVendaPedido TBX
                                            inner join tbVendaPedidoItem TBY
                                            on TBY.NumeroPedido = TBX.NumeroPedido
                                            inner join tbProduto TBZ
                                            on TBZ.idEmpresa  = TBY.idEmpresa
                                            and TBZ.idProduto  = TBY.idProduto
                                            where       TBX.idSituacao = 4
                                                     and  convert(char(8),TBX.DataVendaPedido,112) < '20081201'
                                                     and  TBZ.idProdutoLinha IN(5,39)
                                                     and  TBX.idCliente = TBVP.idCLiente)

     

    GROUP BY TBVP.idEmpresaFilial

     

     

    Agora eu quero que nesse script de vez de eu ficar fazendo data por data, quero fazer por um determinado periodo.

    Eu fiz essa consulta, mas o distinct dentro do count não faz nada no mês.Ele traz o total dos clientes que compraram o produto 'VIVO6', e não realiza o distinct no idcliente,  No primeiro script o count funcionou. Assim o problema é o seguinte, existe um cliente que compraram no 01/12/2008 e no 08/12/2008 o 'VIVO6'. Na consulta mostra esse cliente nos dois dias, sendo que o certo é informar somente no dia 01, porque ele não é mais um cliente novo que fez a compra, porque já comprou no dia 01.

    Conseguiu me enteder?

     

    SELECT              TBVP.idEmpresaFilial,
                              count(distinct TBVP.idcliente)

     

    FROM tbVendaPedido TBVP

     

    INNER JOIN tbVendaPedidoItem TBVPI
    ON TBVPI.NumeroPedido = TBVP.NumeroPedido

     

    WHERE          TBVP.idEmpresa   = 1
                  AND  TBVP.idEmpresaFilial = 3
                 AND  TBVP.idSituacao   = 4
                 AND  convert(char(8),TBVP.DataVendaPedido,112)  between '20081201' and '20081231'
                 AND  TBVPI.idProduto   = 'VIVO6'
                 AND NOT EXISTS(select TBX.idCliente 
                                            from tbVendaPedido TBX
                                            inner join tbVendaPedidoItem TBY
                                            on TBY.NumeroPedido = TBX.NumeroPedido
                                            inner join tbProduto TBZ
                                            on TBZ.idEmpresa  = TBY.idEmpresa
                                            and TBZ.idProduto  = TBY.idProduto
                                            where       TBX.idSituacao = 4
                                                     and  convert(char(8),TBX.DataVendaPedido,112) < '20081201'
                                                     and  TBZ.idProdutoLinha IN(5,39)
                                                     and  TBX.idCliente = TBVP.idCLiente)

     

     

    terça-feira, 6 de janeiro de 2009 14:50
  • Rafael,

     

    Sendo este período informado, no caso em dias ou meses?

    terça-feira, 6 de janeiro de 2009 15:28
  • Dias!!

    terça-feira, 6 de janeiro de 2009 15:37
  •  

    HELP!!!!!
    terça-feira, 6 de janeiro de 2009 17:38
  • Rafael,

     

    Estou pensando em uma solução!!!

    terça-feira, 6 de janeiro de 2009 17:39
  •  

    Junior,

     

    Conseguiu verificar??

     

    Abçs,

    quarta-feira, 7 de janeiro de 2009 15:45
  •  

    Help Novamente!!!!!
    segunda-feira, 12 de janeiro de 2009 11:22
  • Olha... o que eu entendi foi q vc quer, dentro de um periodo, retornar as vendas realizadas de um produto... mas so a primeira venda para cada cliente... se o cara comprar 2 veses traz so a primeira certo ?

     

    Code Snippet

    SELECT MIN(TBX.NumeroPedido)

    FROM

    TBVENDAPEDIDO TBX

    INNER JOIN TBVENDAPEDIDOITEM TBY ON TBY.NUMEROPEDIDO = TBX.NUMEROPEDIDO

    INNER JOIN TBPRODUTO TBZ ON TBZ.IDEMPRESA = TBY.IDEMPRESA AND TBZ.IDPRODUTO = TBY.IDPRODUTO

    WHERE

    TBX.IDSITUACAO = 4

    AND CONVERT(CHAR(8),TBX.DATAVENDAPEDIDO,112) < '20081201'

    AND TBZ.IDPRODUTOLINHA IN (5, 39)

    GROUP BY TBX.idCliente

     

     

    Isso deve te trazer o menos numero de pedido de um cliente para um produto no periodo... teoricamente... quanto menor o numero do pedido... Smile

     

    ve se isso q vc prescisa...

    segunda-feira, 12 de janeiro de 2009 20:45