Como montar este select?

07/10/2010

Pessoal, preciso montar um select que traga as contas de grau inferior ao grau do filtro where e no where do filtro por exemplo se for grau 5 trazer somente se o campo SITUACAO for igual a L   Tentei assim SELECT
classificacao,
grau,
cd_conta,
descricao,
natureza,
SITUACAO,
SUM(valor_deb) as deb,
SUM(valor_cre) as cre
FROM tmpBalCentroCusto
WHERE grau <= 5
and enterprise_id = 09999
AND (situacao not in ("X", "E", "N") OR  (situacao is null)) --Mostrar apenas situação = L
GROUP BY classificacao, grau, cd_conta, descricao, natureza, SITUACAO   Mas assim esta trazendo na soma do select nos graus anteriores ao grau 5 o resultado de contas que não devem entrar no select, que é o caso do valor 1.544,00, que tem no garu 5 mais a situação dele é E. Mais esta mostrando o resultado dele nos graus de cima (1544 não deve ser somado neste caso)   Nem assim também SELECT
classificacao,
grau,
cd_conta,
descricao,
natureza,
SITUACAO,
SUM(valor_deb) as deb,
SUM(valor_cre) as cre
FROM tmpBalCentroCusto
WHERE grau <= 5
AND enterprise_id = 09999
AND ((situacao = "L") OR (situacao IS NULL and grau < 5)) 
GROUP BY classificacao, grau, cd_conta, descricao, natureza, SITUACAO   Outra coisa: Somente as contas de grau 5 que contém a SITUACAO   Isso é um balancete de contabilidade 1-ativo 11-circulante 1101-disponivel ... Esta coisas de contabilidade.     Grato pela ajuda

Adriano Dolce

Respostas

08/10/2010

Emerson

SELECT
  classificacao,
  grau,
  cd_conta,
  descricao,
  natureza,
  SITUACAO,
  SUM(valor_deb) as deb,
  SUM(valor_cre) as cre
FROM
  tmpBalCentroCusto
WHERE
  grau <= 5   -- É MENOR OU IGUAL MESMO?
  and enterprise_id = 09999
  and not (Coalesce(situacao,' ') in ('X', 'E', 'N')) -- Mostrar apenas situação = L
GROUP BY
  classificacao, grau, cd_conta, descricao, natureza, SITUACAO


ou


SELECT
  classificacao,
  grau,
  cd_conta,
  descricao,
  natureza,
  SITUACAO,
  SUM(valor_deb) as deb,
  SUM(valor_cre) as cre
FROM
  tmpBalCentroCusto
WHERE
  ((situacao is null and grau < 5) or (coalesce(situacao,' ') = 'L'))
  AND enterprise_id = 09999
GROUP BY
  classificacao, grau, cd_conta, descricao, natureza, SITUACAO



Responder Citar

08/10/2010

Adriano Dolce

Olá Emerson... Obrigado pela resposta... Mas teria como montar o select sem uso de recusros de funções exclusivas de bancos... Por exemplo sme o COALESCE ?   Pra dizer a verdade estou usando o access   E assim não deu certo  
SELECT
  classificacao,
  grau,
  cd_conta,
  descricao,
  natureza,
  SITUACAO,
  SUM(valor_deb) as deb,
  SUM(valor_cre) as cre
FROM
  tmpBalCentroCusto
WHERE
  ((situacao is null and grau < 5) or (nz(situacao,' ') = 'L')) --Não posso usar o NZ também
  AND enterprise_id = 09999
GROUP BY
  classificacao, grau, cd_conta, descricao, natureza, SITUACAO
  Nem assim
SELECT
  classificacao,
  grau,
  cd_conta,
  descricao,
  natureza,
  SITUACAO,
  SUM(valor_deb) as deb,
  SUM(valor_cre) as cre
FROM
  tmpBalCentroCusto
WHERE
   ((situacao is null  and grau <= 5) or ((IIf([situacao] Is Null,'',[situacao])) = 'L')) and
   enterprise_id = 09999
GROUP BY
  classificacao, grau, cd_conta, descricao, natureza, SITUACAO
  Apesar que não posso usar funções exclusivas de banco nos meus selects, por causa que vou suar tanto no access quanto no sql server.   Mais testes os dois selects e esta somando o total dos grupos inferiores mesmo não   Exemplo   na conta sintetica do caixa com situação L tenho deb 50.000 cred 8.000   E tenho outros lancamentos só que não estão liberados   Mais a soma do ativo esta acumulando de todos   e neste caso quero apenas o que estão com situação L   então deveria vir na conta ATIVO 50.000 e 8.000   e não o total de todas as contas. classificacao grau cd_conta descricao natureza SITUACAO deb cre 1 1 0 A T I V O D 60000 16000 11 2 0 ATIVO CIRCULANTE D 60000 16000 1101 3 0 DISPONIVEL D 60000 16000 110101 4 0 CAIXA D 60000 16000 1101010001 5 19 CAIXA GERAL D L 50000 8000 2 1 0 P A S S I V O D 5000 10000 21 2 0 PASSIVO CIRCULANTE D 5000 10000 2101 3 0 OBRIGACOES DE CURTO PRAZO D 5000 10000 210101 4 0 EMPR. E FINANCIAMENTOS D 5000 10000 4 1 0 D E S P E S A S D 8000 0 41 2 0 DESPESAS OPERACIONAIS D 8000 0 4103 3 0 DESPESAS GERAIS D 8000 0 410301 4 0 UTILIDADES E SERVICOS D 8000 0 4103010034 5 4529 ESTACIONAMENTO D L 8000 0   Obrigado amigo
Responder Citar

08/10/2010

Adriano Dolce

Se eu titar a condição, no select
SELECT
  classificacao,
  grau,
  cd_conta,
  descricao,
  natureza,
  SITUACAO,
  SUM(valor_deb) as deb,
  SUM(valor_cre) as cre
FROM
  tmpBalCentroCusto
WHERE
  
   enterprise_id = 0083
GROUP BY
  classificacao, grau, cd_conta, descricao, natureza, SITUACAO
  Só pra mostrar todos os dados que tenho na tabela classificacao grau cd_conta descricao natureza SITUACAO deb cre 1 1 0 A T I V O D 60000 16000 11 2 0 ATIVO CIRCULANTE D 60000 16000 1101 3 0 DISPONIVEL D 60000 16000 110101 4 0 CAIXA D 60000 16000 1101010001 5 19 CAIXA GERAL D L 50000 8000 1101010001 5 19 CAIXA GERAL D N 10000 8000 2 1 0 P A S S I V O D 5000 10000 21 2 0 PASSIVO CIRCULANTE D 5000 10000 2101 3 0 OBRIGACOES DE CURTO PRAZO D 5000 10000 210101 4 0 EMPR. E FINANCIAMENTOS D 5000 10000 2101010001 5 27 BANCO DO BRASIL S/A D E 5000 10000 4 1 0 D E S P E S A S D 8000 0 41 2 0 DESPESAS OPERACIONAIS D 8000 0 4103 3 0 DESPESAS GERAIS D 8000 0 410301 4 0 UTILIDADES E SERVICOS D 8000 0 4103010034 5 4529 ESTACIONAMENTO D L 8000 0   Então preciso somar apenas com a SITUACAO IGUAL A L   Se reparar ai na imagem, o grupo PASSIVO e seus graus nem deveria entrar no select da forma que eu preciso... E as contas do ATIVO e DESPESAS apenas som situação = L   No caso ai o ATIVO deveria trazer a soma 50.000,00 e 8.000 PQ SÓ ELE ESTA NA CONDIÇÃO = L   Obrigado amigo.
Responder Citar

10/10/2010

Emerson

se não é pra somar os que têm situação diferente de 'L', porque essa condição:

((situacao is null  and grau <= 5) ???


deveria ser somente:

SELECT
  classificacao,
  grau,
  cd_conta,
  descricao,
  natureza,
  SITUACAO,
  SUM(valor_deb) as deb,
  SUM(valor_cre) as cre
FROM
  tmpBalCentroCusto
WHERE
   situacao = 'L' and
   enterprise_id = 09999
Responder Citar

10/10/2010

Adriano Dolce

Então é impossivel fazer este select?

Montando toda herarquia do filho (grau analitico) para o (grau sintetico)

Digo isso porque estou usando uma tabela temporaria.

E ja tentei como vc mensionou ai e neste caso o select mostra apenas o grau anatilico ... ou seja o ultimo, sabe o pq? Por que as contas acima não possui situação cfe mostrei na imagem acima.

Obrigado
Responder Citar

11/10/2010

Adriano Dolce

Consegui...   Baseado no que vc postou tive uma ideia em motar o select com a condição no where somente com a situação = 'L' ou is null   E ir montando a tabela temp   Depois disso, com a tabela montado apenas com as informações que preciso, ai sim monto o select de soma dos dados, e o resultado foi satisfatório   classificacao grau cd_conta descricao natureza deb cre 1 1 0 A T I V O D 50000 8000 11 2 0 ATIVO CIRCULANTE D 50000 8000 1101 3 0 DISPONIVEL D 50000 8000 110101 4 0 CAIXA D 50000 8000 1101010001 5 19 CAIXA GERAL D 50000 8000 4 1 0 D E S P E S A S D 8000 0 41 2 0 DESPESAS OPERACIONAIS D 8000 0 4103 3 0 DESPESAS GERAIS D 8000 0 410301 4 0 UTILIDADES E SERVICOS D 8000 0 4103010034 5 4529 ESTACIONAMENTO D 8000 0 Mais uma vez obrigado pela atenção Emerson.   Problema resolvido.
Responder Citar