Como montar este select?
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
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
Curtidas 0
Respostas
Emerson Nascimento
07/10/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
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
GOSTEI 0
Adriano Dolce
07/10/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
Nem assim
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
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
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
GOSTEI 0
Adriano Dolce
07/10/2010
Se eu titar a condição, no select
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.
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
GOSTEI 0
Emerson Nascimento
07/10/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
((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
GOSTEI 0
Adriano Dolce
07/10/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
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
GOSTEI 0
Adriano Dolce
07/10/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.
GOSTEI 0