Usuário com melhor resposta
Query - comparando data inicial e final de duas tabelas.

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.
Respostas
-
/*DECLARE @DATAINICIAL DATETIME SET @DATAINICIAL= '2012-01-01'Olá,
Não sei se já conseguiu !!!
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'- Marcado como Resposta Durval RamosModerator terça-feira, 11 de novembro de 2014 01:13
-
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.
- Marcado como Resposta Durval RamosModerator terça-feira, 11 de novembro de 2014 01:13
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 8 de outubro de 2014 18:17
- Marcado como Resposta Durval RamosModerator terça-feira, 11 de novembro de 2014 01:12
Todas as Respostas
-
-
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')
-
-
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.
-
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
att, wsti.
-
/*DECLARE @DATAINICIAL DATETIME SET @DATAINICIAL= '2012-01-01'Olá,
Não sei se já conseguiu !!!
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'- Marcado como Resposta Durval RamosModerator terça-feira, 11 de novembro de 2014 01:13
-
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.
- Marcado como Resposta Durval RamosModerator terça-feira, 11 de novembro de 2014 01:13
-
-
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.
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 8 de outubro de 2014 18:17
- Marcado como Resposta Durval RamosModerator terça-feira, 11 de novembro de 2014 01:12
-
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.
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 8 de outubro de 2014 18:17