Fórum Problema com data no Select? #365743
02/11/2008
0
Cada ´V´ deste ai fica em uma coluna
então montei uma select para trazer o count de cada coluna
select distinct(a.idcaixa), b.nmcaixa, ( select count(vdnaofinalizada) from movimento where b.idcaixa = idcaixa and vdnaofinalizada = ´V´ )as vdnaofinalizado, ( select count(cxnaoinformado) from movimento where b.idcaixa = idcaixa and cxnaoinformado = ´V´ )as CxNaoInformado, ( select count(inversaopgto) from movimento where b.idcaixa = idcaixa and inversaopgto = ´V´ )as InversaoPgto, ( select count(vdfinaldeumdiapoutro) from movimento where b.idcaixa = idcaixa and vdfinaldeumdiapoutro = ´V´ )as vdfinaldeumdiapoutro, ( select count(cxinfemdterrada) from movimento where b.idcaixa = idcaixa and cxinfemdterrada = ´V´ )as cxinfemdterrada, ( select count(vlinformadocorretamente) from movimento where b.idcaixa = idcaixa and vlinformadocorretamente = ´V´ )as vlinformadocorretamente from movimento a, respcaixa b where b.idcaixa = a.idcaixa --and a.idcaixa = :varID --and a.dtmovimento >= ´01/11/2008´ and a.dtmovimento <= ´01/11/2008´ --between :pdtIn and :pdtFn and a.cxnaoinformado = ´V´
o resultado é este do select
Mais por exemplo se eu colocar esta linha aqui
[b:e929ec48b0]--and a.dtmovimento >= ´01/11/2008´ and a.dtmovimento <= [/b:e929ec48b0]´01/11/2008´
ou usar o between
[b:e929ec48b0]--between :pdtIn and :pdtFn
[/b:e929ec48b0]
Com data de 01/11/2008 a 01/11/2008, não esta me trazendo o resultado correto
que seria
e não
Ou seja ele esta pegando a ID certa que tem no dia 01/11/2008, mais esta somando tudo e não só o que esta naquela coluna.
Então pessoal, como faço para contar os valores corretos cfe. a data?
Obs: Estou usando Firebird 2.0 e ainda não testei no projeto, estou testando diretamente no IBExpert
Adriano_servitec
Curtir tópico
+ 0Posts
02/11/2008
Adriano_servitec
var
DataIn, DataFn : TDate;
begin
inherited;
{Passando as datas para variaveis}
DataIn := StrToDate(MaskEdit1.Text);
DataFn := StrToDate(MaskEdit2.Text);
with IBQListCaixa do
begin
Close;
Sql.Clear;
Sql.Text := ´ select distinct(a.idcaixa), b.nmcaixa, ´+
´ ( select count(vdnaofinalizada) ´ +
´ from movimento ´+
´ where b.idcaixa = idcaixa and vdnaofinalizada = ´´V´´ )as vdnaofinalizado, ´ +
´ ( select count(cxnaoinformado) ´+
´ from movimento ´+
´ where b.idcaixa = idcaixa ´ +
´ and cxnaoinformado = ´´V´´ )as CxNaoInformado, ´+
´ ( select count(inversaopgto) ´ +
´ from movimento ´+
´ where b.idcaixa = idcaixa and inversaopgto = ´´V´´ )as InversaoPgto, ´ +
´ ( select count(vdfinaldeumdiapoutro) ´+
´ from movimento where b.idcaixa = idcaixa ´ +
´ and vdfinaldeumdiapoutro = ´´V´´ )as vdfinaldeumdiapoutro, ´ +
´ ( select count(cxinfemdterrada) ´+
´ from movimento where b.idcaixa = idcaixa ´ +
´ and cxinfemdterrada = ´´V´´ )as cxinfemdterrada, ´ +
´ ( select count(vlinformadocorretamente) ´+
´ from movimento where b.idcaixa = idcaixa ´ +
´ and vlinformadocorretamente = ´´V´´ )as vlinformadocorretamente ´ +
´ from movimento a, respcaixa b ´+
´ where b.idcaixa = a.idcaixa ´ +
´ and a.dtmovimento between :pdtIn and :pdtFn ´+
´ and a.cxnaoinformado = ´´V´´ ´;
ParamByName(´pdtIn´).asDate := DataIn;
ParamByName(´pdtFn´).AsDate := DataFn;
Open;
end; Creio que esteja errado o select
Gostei + 0
02/11/2008
Emerson Nascimento
Gostei + 0
02/11/2008
Emerson Nascimento
Sql.Text := ´ select a.idcaixa, b.nmcaixa, ´+ ´ sum(case when coalesce(a.vdnaofinalizada,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as vdnaofinalizado, ´+ ´ sum(case when coalesce(a.cxnaoinformado,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as CxNaoInformado, ´+ ´ sum(case when coalesce(a.inversaopgto,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as InversaoPgto, ´ + ´ sum(case when coalesce(a.vdfinaldeumdiapoutro,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as vdfinaldeumdiapoutro, ´ + ´ sum(case when coalesce(a.cxinfemdterrada,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as cxinfemdterrada, ´ + ´ sum(case when coalesce(a.vlinformadocorretamente,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as as vlinformadocorretamente ´ + ´ from movimento a, respcaixa b ´+ ´ where b.idcaixa = a.idcaixa ´ + ´ and a.dtmovimento between :pdtIn and :pdtFn ´+ ´ and a.cxnaoinformado = ´´V´´ ´+ ´ group by a.idcaixa, b.nmcaixa ´;
Gostei + 0
02/11/2008
Adriano_servitec
Sql.Text := ´ select a.idcaixa, b.nmcaixa, ´+ ´ sum(case when coalesce(a.vdnaofinalizada,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as vdnaofinalizado, ´+ ´ sum(case when coalesce(a.cxnaoinformado,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as CxNaoInformado, ´+ ´ sum(case when coalesce(a.inversaopgto,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as InversaoPgto, ´ + ´ sum(case when coalesce(a.vdfinaldeumdiapoutro,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as vdfinaldeumdiapoutro, ´ + ´ sum(case when coalesce(a.cxinfemdterrada,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as cxinfemdterrada, ´ + ´ sum(case when coalesce(a.vlinformadocorretamente,´´F´´) = ´´V´´ ´+ ´ then 1 ´+ ´ else 0 end) as as vlinformadocorretamente ´ + ´ from movimento a, respcaixa b ´+ ´ where b.idcaixa = a.idcaixa ´ + ´ and a.dtmovimento between :pdtIn and :pdtFn ´+ ´ and a.cxnaoinformado = ´´V´´ ´+ ´ group by a.idcaixa, b.nmcaixa ´;
Olá [b:5577551814]emerson.en[/b:5577551814], testei este select que você postou, pareçe que esta mostrando o resultado certo, não testei bem ainda.
Vou tentar mostrar como esta na tabela (vou encurtar os campos somente para mostrar como esta)
ID----data---------campo1----campo2-----campo3-----campo4 2-----01.11.2008-----V--------------------------------------------- 2-----01.11.2008-----V-----------V-------------------------V-----
Então o select creio eu que não vai precisar desta condição aqui em destaque abaixo
Vou fazer mais uns testes, pra ver se esta correto os valores, mais a principio pareçe que sim.
Outra duvida também amigo.
Aqui o que você quis dizer é que com os subselects ficaria mais lento o SQL?
Obrigado por me ajudar amigo.
Gostei + 0
02/11/2008
Adriano_servitec
Então são datas diferente e mesmo assim agrupa num só sele
Gostei + 0
02/11/2008
Emerson Nascimento
Gostei + 0
02/11/2008
Adriano_servitec
Mais uma vez obrigado.
Gostei + 0
11/11/2008
Adriano_servitec
Pensei num order by DESC, mais como seria neste select?
var
DataIn, DataFn : TDate;
begin
inherited;
if RadioButton2.Checked = True then
begin
{Passando as datas para variaveis}
DataIn := StrToDate(MaskEdit1.Text);
DataFn := StrToDate(MaskEdit2.Text);
with IBQListCaixa do
begin
Close;
Sql.Clear;
Sql.Text := ´ select a.idcaixa, b.nmcaixa, c.nmloja, ´+
´ sum(case when coalesce(a.vdnaofinalizada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vdnaofinalizado, ´+
´ sum(case when coalesce(a.cxnaoinformado,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as CxNaoInformado, ´+
´ sum(case when coalesce(a.inversaopgto,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as InversaoPgto, ´ +
´ sum(case when coalesce(a.vdfinaldeumdiapoutro,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vdfinaldeumdiapoutro, ´ +
´ sum(case when coalesce(a.cxinfemdterrada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as cxinfemdterrada, ´ +
´ sum(case when coalesce(a.vlinformadocorretamente,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vlinformadocorretamente, ´ +
´ sum(case when coalesce(a.sangriaincorreta,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as sangriaincorreta, ´ +
´ sum(case when coalesce(a.outrostperros,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as outrostperros ´ +
´ from movimento a, respcaixa b, lojas c ´+
´ where b.idcaixa = a.idcaixa ´ +
´ and c.id_loja = b.idloja ´+
´ and a.dtmovimento between :pdtIn and :pdtFn ´+
´ group by a.idcaixa, b.nmcaixa, c.nmloja ´;//+
// ´ order by vdnaofinalizada, desc ´;
ParamByName(´pdtIn´).asDate := DataIn;
ParamByName(´pdtFn´).AsDate := DataFn;
Open;
end;Não estou sabendo como montar este SQL
Grato pela ajuda
Adriano.
Gostei + 0
11/11/2008
Emerson Nascimento
Gostei + 0
11/11/2008
Adriano_servitec
var
DataIn, DataFn : TDate;
begin
inherited;
if RadioButton2.Checked = True then
begin
{Passando as datas para variaveis}
DataIn := StrToDate(MaskEdit1.Text);
DataFn := StrToDate(MaskEdit2.Text);
with IBQListCaixa do
begin
Close;
Sql.Clear;
Sql.Text := ´ select a.idcaixa, b.nmcaixa, c.nmloja, ´+
´ sum(case when coalesce(a.vdnaofinalizada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vdnaofinalizado, ´+
´ sum(case when coalesce(a.cxnaoinformado,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as CxNaoInformado, ´+
´ sum(case when coalesce(a.inversaopgto,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as InversaoPgto, ´ +
´ sum(case when coalesce(a.vdfinaldeumdiapoutro,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vdfinaldeumdiapoutro, ´ +
´ sum(case when coalesce(a.cxinfemdterrada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as cxinfemdterrada, ´ +
´ sum(case when coalesce(a.vlinformadocorretamente,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vlinformadocorretamente, ´ +
´ sum(case when coalesce(a.sangriaincorreta,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as sangriaincorreta, ´ +
´ sum(case when coalesce(a.outrostperros,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as outrostperros ´ +
´ from movimento a, respcaixa b, lojas c ´+
´ where b.idcaixa = a.idcaixa ´ +
´ and c.id_loja = b.idloja ´+
´ and a.dtmovimento between :pdtIn and :pdtFn ´+
´ group by a.idcaixa, b.nmcaixa, c.nmloja ´+
´ order by 4,5,6,7,8,9,10,11 desc ´;
ParamByName(´pdtIn´).asDate := DataIn;
ParamByName(´pdtFn´).AsDate := DataFn;
Open;
end;
end;Gostei + 0
12/11/2008
Adriano_servitec
Sobe...
Gostei + 0
12/11/2008
Emerson Nascimento
var
DataIn, DataFn : TDate;
begin
inherited;
if RadioButton2.Checked = True then
begin
{Passando as datas para variaveis}
DataIn := StrToDate(MaskEdit1.Text);
DataFn := StrToDate(MaskEdit2.Text);
with IBQListCaixa do
begin
Close;
Sql.Clear;
Sql.Text := ´ select a.idcaixa, b.nmcaixa, c.nmloja, ´+
´ sum(case when coalesce(a.vdnaofinalizada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vdnaofinalizado, ´+
´ sum(case when coalesce(a.cxnaoinformado,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as CxNaoInformado, ´+
´ sum(case when coalesce(a.inversaopgto,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as InversaoPgto, ´ +
´ sum(case when coalesce(a.vdfinaldeumdiapoutro,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vdfinaldeumdiapoutro, ´ +
´ sum(case when coalesce(a.cxinfemdterrada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as cxinfemdterrada, ´ +
´ sum(case when coalesce(a.vlinformadocorretamente,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as vlinformadocorretamente, ´ +
´ sum(case when coalesce(a.sangriaincorreta,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as sangriaincorreta, ´ +
´ sum(case when coalesce(a.outrostperros,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as outrostperros, ´ +
//*** total de erros. esse será o campo usado no order by ***//
´ sum(case when coalesce(a.vdnaofinalizada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´+
´ sum(case when coalesce(a.cxnaoinformado,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´+
´ sum(case when coalesce(a.inversaopgto,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´ +
´ sum(case when coalesce(a.vdfinaldeumdiapoutro,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´ +
´ sum(case when coalesce(a.cxinfemdterrada,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´ +
´ sum(case when coalesce(a.vlinformadocorretamente,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´ +
´ sum(case when coalesce(a.sangriaincorreta,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) + ´ +
´ sum(case when coalesce(a.outrostperros,´´F´´) = ´´V´´ ´+
´ then 1 ´+
´ else 0 end) as total_de_erros ´ +
´ from movimento a, respcaixa b, lojas c ´+
´ where b.idcaixa = a.idcaixa ´ +
´ and c.id_loja = b.idloja ´+
´ and a.dtmovimento between :pdtIn and :pdtFn ´+
´ group by a.idcaixa, b.nmcaixa, c.nmloja ´+
´ order by 12 desc ´;
ParamByName(´pdtIn´).asDate := DataIn;
ParamByName(´pdtFn´).AsDate := DataFn;
Open;
end;
end;Gostei + 0
12/11/2008
Adriano_servitec
Tem como eu jogar o total, por nome deste select em um novo campo também?
Tipo assim
fulano---total erros 10
ciclano--total erros 8
beltrano---total erros 5
Isso tudo no mesmo select
É que a ideia seria tirar um relatorio num determinado período e em baixo neste relatorio um total
Grato
Adriano
Gostei + 0
13/11/2008
Adriano_servitec
Sobe...
Gostei + 0
14/11/2008
Adriano_servitec
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)