Array
(
)

Como montar este select?

Adriano_servitec
   - 07 out 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

Emerson
   - 08 out 2010

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

Adriano_servitec
   - 08 out 2010

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   #Código

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 #Código
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

Adriano_servitec
   - 08 out 2010

Se eu titar a condição, no select #Código

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.

Emerson
   - 10 out 2010

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

Adriano_servitec
   - 10 out 2010

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

Adriano_servitec
   - 11 out 2010

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.