none
Query - comparando data inicial e final de duas tabelas. RRS feed

  • Pergunta

  • Pessoal, possuo 4 tabelas que descreverei abaixo, precisaria de alguns campos e executar a filtragem pelas datas inicial e final vindas por parâmetros do sistema(c#)  de duas dessas tabelas.  como poderia fazer isso ?

    [Tbl_Caixa]   
       [Id_Caixa]
       [id_operadora]
       [id_empresa]     --preciso
       [ComandaI]
       [ComandaF]
       [Dinheiro]      --preciso
       [Cheque]        --preciso
       [Pendurada]      --preciso
       [Contra_valeRe]  --preciso
       [data]           --preciso
      
    [Tbl_CaixaCartaoValor]
       [idcadcartao]      --preciso
       [valor]
       [DATA]
       [idoperCC]
       [idempresa]        --preciso
       [datarecebimento]  --preciso
       [valorLiquido]     --preciso
     
    [Tbl_CadCartaoDC]
        [IdcadCartao]    --preciso
        [NomeCartao]     --preciso
        [TempoCredito]
        [taxa]
        [IDOPER]
        [IdEmpresa]     --preciso
      
    [Tbl_Empresa]
        [id_empresa]   --preciso
        [NomeFantasia] --preciso

    Os id_empresa e idcadcartao são iguais .

    Desde já agradeço quem puder ajudar.

       
    segunda-feira, 6 de outubro de 2014 12:54

Respostas

  • Olá,

    Não sei se já conseguiu !!!

    /*DECLARE @DATAINICIAL DATETIME SET @DATAINICIAL=  '2012-01-01'    
    DECLARE @DATAFINAL DATETIME SET @DATAFINAL=  '2014-12-31'    
    */    

    SELECT Cx.id_empresa, 
           Cx.Dinheiro,
           Cx.Cheque, 
           Cx.Pendurada,
           cx.Contra_valeRe,
           Cx.data,
           CCV.idcadcartao,
           CCV.idEmpresa.
           CCV.datarecebimento,
           CCV.valorLiquido,
           CDC.IdcadCartao,
           CDC.NomeCartao,
           CDC.idEmpresa,
           E.id_empresa, 
           E.NomeFantasia    

    FROM tbl_Caixa CX
           Inner join Tbl_CaixaCartaoValor CCV
              on CX.id_empresa=CCV.idempresa and CCV.idoperCC= CX.id_operadora
           Inner join Tbl_CadCartaoDC CCD
              on CX.id_empresa=CCD.idEmpresa and CCD.idoper= CX.id_operadora
           Inner Join Tbl_Empresa EMP 
              on EMP.id_empresa=CX.id_empresa 

       WHERE Cx.data between  @DATAINICIAL + ' 00:00:00' and @DATAFINAL + ' 23:59:59' 
       AND CCV.data between  @DATAINICIAL + ' 00:00:00' and @DATAFINAL + ' 23:59:59' 
       and CCV.datarecebimento between @DATAINICIAL + ' 00:00:00' and @DATAFINAL + ' 23:59:59' 

    segunda-feira, 6 de outubro de 2014 17:12
  • Oi alineBC, tive que fazer algumas alterações no cod, mas mesmo assim continua a duplicar os registros.

    os campos CCV.idoperCC= CX.id_operadora não correspondem dai tive que remove-los.

    os campos que tem a mesma chave é o id_empresa nas 4 tabelas .  e a Tbl_CaixaCartaoValor e tbl_cadCartaoDC tem o id_cadCartao que são iguas nas duas.

    segunda-feira, 6 de outubro de 2014 18:08
  • Deleted
    segunda-feira, 6 de outubro de 2014 21:53

Todas as Respostas

  • Deleted
    • Sugerido como Resposta Pablotdv segunda-feira, 6 de outubro de 2014 13:59
    segunda-feira, 6 de outubro de 2014 13:30
  • Oi Jose, vc sempre me salvando rsrs, as colunas data e datarecebimento são date sem hora.

    posso utilizar o BETWEEN para comprar os campos de datas das duas tabelas ?

    SELECT E.id_empresa, E.NomeFantasia,
           Cx.data, Cx.Dinheiro, Cx.Cheque, Cx.Pendurada, cx.Contra_valeRe,
           CCV.datarecebimento, CCV.valorLiquido,
           CDC.NomeCartao
      from Tbl_Empresa as E 
           inner join Tbl_Caixa as Cx on Cx.id_empresa = E.id_empresa
           inner join Tbl_CaixaCartaoValor as CCV on CCV.idcadcartao = E.id_empresa
           inner join Tbl_CadCartaoDC as CDC on DCD.IdEmpresa = E.id_empresa
      where (Cx.data between => 'datainial' and <='datafinal')
            and (CCV.datarecebimento between=> 'datainial' and <='datafinal')

    segunda-feira, 6 de outubro de 2014 14:27
  • Deleted
    segunda-feira, 6 de outubro de 2014 15:23
  • Jose, essas tabelas só possuem PK,  os campos que tem a mesma chave é o id_empresa nas 4 tabelas .  e a Tbl_CaixaCartaoValor e tbl_cadCartaoDC tem o id_cadCartao que são iguas nas duas.

    Fiz um teste direto no sql e não houve retorno.

    Vou refazer uns teste e posto o resultado.

    segunda-feira, 6 de outubro de 2014 15:45
  • Oi Jose, fiz umas alterações que me trouxeram retorno, mas tenho um problema, na tbl caixa o retorno esta correto

    pois cada linha  retorna exatemente os valores dos campos dinheiro,cheque,pendurada e contra vale. mas no campo valor liquido da tbl caixacartaovalor os dados saem duplicados.

    postarei o cod alterado abaixo.

    SELECT E.id_empresa, E.NomeFantasia,Cx.data, Cx.Dinheiro, Cx.Cheque, Cx.Pendurada,
     cx.Contra_valeRe,CCV.datarecebimento, CCV.valorLiquido, CDC.NomeCartao,CDC.IdcadCartao
      from Tbl_Empresa as E 
           inner join Tbl_Caixa as Cx on Cx.id_empresa = E.id_empresa 
           inner join Tbl_CaixaCartaoValor as CCV on CCV.idempresa = E.id_empresa
           inner join Tbl_CadCartaoDC as CDC on CDC.IdcadCartao = CCV.idcadcartao
              where Cx.data between '2014-10-02' and '2014-10-27'
                and CCV.datarecebimento between '2014-10-02' and '2014-10-27' and e.id_empresa = 3

    o resultado

    resultado

    att, wsti.

    segunda-feira, 6 de outubro de 2014 16:31
  • Olá,

    Não sei se já conseguiu !!!

    /*DECLARE @DATAINICIAL DATETIME SET @DATAINICIAL=  '2012-01-01'    
    DECLARE @DATAFINAL DATETIME SET @DATAFINAL=  '2014-12-31'    
    */    

    SELECT Cx.id_empresa, 
           Cx.Dinheiro,
           Cx.Cheque, 
           Cx.Pendurada,
           cx.Contra_valeRe,
           Cx.data,
           CCV.idcadcartao,
           CCV.idEmpresa.
           CCV.datarecebimento,
           CCV.valorLiquido,
           CDC.IdcadCartao,
           CDC.NomeCartao,
           CDC.idEmpresa,
           E.id_empresa, 
           E.NomeFantasia    

    FROM tbl_Caixa CX
           Inner join Tbl_CaixaCartaoValor CCV
              on CX.id_empresa=CCV.idempresa and CCV.idoperCC= CX.id_operadora
           Inner join Tbl_CadCartaoDC CCD
              on CX.id_empresa=CCD.idEmpresa and CCD.idoper= CX.id_operadora
           Inner Join Tbl_Empresa EMP 
              on EMP.id_empresa=CX.id_empresa 

       WHERE Cx.data between  @DATAINICIAL + ' 00:00:00' and @DATAFINAL + ' 23:59:59' 
       AND CCV.data between  @DATAINICIAL + ' 00:00:00' and @DATAFINAL + ' 23:59:59' 
       and CCV.datarecebimento between @DATAINICIAL + ' 00:00:00' and @DATAFINAL + ' 23:59:59' 

    segunda-feira, 6 de outubro de 2014 17:12
  • Oi alineBC, tive que fazer algumas alterações no cod, mas mesmo assim continua a duplicar os registros.

    os campos CCV.idoperCC= CX.id_operadora não correspondem dai tive que remove-los.

    os campos que tem a mesma chave é o id_empresa nas 4 tabelas .  e a Tbl_CaixaCartaoValor e tbl_cadCartaoDC tem o id_cadCartao que são iguas nas duas.

    segunda-feira, 6 de outubro de 2014 18:08
  • Deleted
    segunda-feira, 6 de outubro de 2014 18:32
  • Jose, O resultado é o mesmo da consulta anterior.

    SELECT Cx.id_empresa, NomeFantasia= (SELECT NomeFantasia from Tbl_Empresa as E where E.id_empresa = Cx.id_empresa), Cx.data, Cx.Dinheiro, Cx.Cheque, Cx.Pendurada, cx.Contra_valeRe, CCV.datarecebimento, CCV.valorLiquido, CDC.NomeCartao from Tbl_Caixa as Cx inner join Tbl_CaixaCartaoValor as CCV on CCV.idempresa = Cx.id_empresa inner join Tbl_CadCartaoDC as CDC on CDC.IdEmpresa = CCV.idempresa and CDC.Idcadcartao = CCV.idcadcartao where Cx.data between '2014-10-02' and '2014-10-27' and CCV.datarecebimento between '2014-10-02' and '2014-10-27' and Cx.id_empresa = 3;

      Há umas semanas atras vc havia me ajudado criando Um CTE aproveitei o modelo que vc havia criado e tentei adapta-lo a essa consulta,  o resultado ate é o esperado se eu conseguir efetuar uma soma no campo valorLiquido  quando idcadcartao for = a IdcadaCartao mas eu não sei se isso pode ser feito e se pode qual a forma de faze-lo ??

    ;with DataValor as ( SELECT Cx.id_empresa,Cx.Dinheiro,Cx.Cheque,Cx.Pendurada,CX.Contra_valeRe, Cx.data, CCV.idcadcartao,
         CCV.valor,CDC.NomeCartao,CDC.idEmpresa, Seq= ROW_NUMBER() over 
         (PARTITION by Cx.id_empresa,CCV.idcadcartao,
         CCV.idEmpresa,CDC.IdcadCartao,CDC.idEmpresa order by CCV.DATA desc )
          from Tbl_CaixaCartaoValor as CCV inner join Tbl_CadCartaoDC as CDC on CCV.idcadcartao = CDC.IdcadCartao and
          CCV.idempresa = CDC.IdEmpresa
          inner join Tbl_Caixa as CX on CX.id_empresa = CCV.idempresa 
          where CCV.idempresa = 3  and Cx.data between  '2014-10-02' and '2014-10-03'  
          and CCV.DATA between '2014-10-02' and '2014-10-28')
          Select DV.id_empresa,DV.Dinheiro,DV.Cheque,DV.Pendurada,DV.Contra_valeRe, DV.data, DV.idcadcartao,
         DV.idEmpresa,DV.DATA,DV.valor,DV.IdcadCartao,DV.NomeCartao,DV.idEmpresa from DataValor as DV 
         inner join Tbl_Empresa as E on E.id_empresa = DV.id_empresa where DV.Seq = 2;

    att, Wsti.


    • Editado Wsti segunda-feira, 6 de outubro de 2014 19:27 Mudança no texto.
    segunda-feira, 6 de outubro de 2014 19:17
  • Deleted
    segunda-feira, 6 de outubro de 2014 21:53
  • oi jose, vamos lá. as datas estão sendo buscadas por periodo. apesar de existir dois campos de data na

    tblCaixaCartaoValor. o DATA é o dia do cadastro, e datarecebimento é a data que o valorliquido será creditado.

    idcadcartao é a identificação da da tabela CadCartaoDC na qual preciso do NomeCartao que é a bandeira.

    então na logica poderia ter N maquinas de cartão com N bandeiras(NomeCartao) dai a pergunta se era possivel efetuar uma soma do campo valorLiquido quando idcadcartao fosse igual nas duas tabelas.

    as tabelas como disse antes só possuem PK. segue abaixo o diagrama.

    Att, Wsti.

    diagrama

    segunda-feira, 6 de outubro de 2014 23:40