Como montar este select?

07/10/2010

0

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

Adriano Dolce

Responder

Posts

08/10/2010

Emerson Nascimento

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

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

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

10/10/2010

Emerson Nascimento

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

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

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar