Fórum Ajuda com Select avançado #378708
01/06/2010
0
SELECT ID, BX_PAGAMENTO, ESPECIE_ID, CLASSIFICACAO_ID, MOVIMENTO_ID, STATUS_ID, DESCRICAO_ID, REG_HISTORICO, CLIENTE_ID, BX_VALOR_LIQUIDO, CASE
WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=2 THEN '1'
WHEN CLASSIFICACAO_ID=7 THEN '2'
WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=1 THEN '3'
WHEN CLASSIFICACAO_ID=16 AND DESCRICAO_ID=1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE='C') THEN '3'
END AS MOVIMENTO
from FINANCEIRO
where STATUS_ID<>0 AND BX_VALOR_LIQUIDO<>0 and BX_PAGAMENTO>=:INICIO AND BX_PAGAMENTO<=:FIM
ORDER BY BX_PAGAMENTO DESC
Gostaria de dar um GROUP BY MOVIMENTO, sendo que movimento não faz parte da minha tabela e sim a associação do resultado case.
Alguém pode dar uma luz?
Rodrigo Pagani
Curtir tópico
+ 0Posts
02/06/2010
Wilson Junior
Espero ter colaborado.
Gostei + 0
02/06/2010
Rodrigo Pagani
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
como resolver, sendo que eu quero o group by somente com o indice 11?
Gostei + 0
02/06/2010
Rodrigo Pagani
Select CASE
WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=2 THEN '1'
WHEN CLASSIFICACAO_ID=7 THEN '2'
WHEN ((CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=1) OR (CLASSIFICACAO_ID=16 AND DESCRICAO_ID=1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE='C')) THEN '3'
END AS MOVIMENTO, SUM(BX_VALOR_LIQUIDO)
from FINANCEIRO
where STATUS_ID<>0 AND BX_VALOR_LIQUIDO<>0 AND BX_PAGAMENTO>=:INICIO AND BX_PAGAMENTO<=:FIM
GROUP BY 1
continua erro
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Gostei + 0
02/06/2010
Wilson Junior
Gostei + 0
02/06/2010
Rodrigo Pagani
Seria melhor eu mudar a versão?
Gostei + 0
02/06/2010
Rodrigo Pagani
Select CASE
WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=2 THEN '1'
WHEN CLASSIFICACAO_ID=7 THEN '2'
WHEN ((CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=1) OR (CLASSIFICACAO_ID=16 AND DESCRICAO_ID=1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE='C')) THEN '3'
END AS MOVIMENTO, SUM(BX_VALOR_LIQUIDO)
from FINANCEIRO
where STATUS_ID<>0 AND BX_VALOR_LIQUIDO<>0 AND BX_PAGAMENTO>='5/25/2010' AND BX_PAGAMENTO<='5/31/2010'
GROUP BY 1
Deu erro
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Então fiz o seguinte select mudando o group by
Select CASE
WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=2 THEN '1'
WHEN CLASSIFICACAO_ID=7 THEN '2'
WHEN ((CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID=1) OR (CLASSIFICACAO_ID=16 AND DESCRICAO_ID=1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE='C')) THEN '3'
END AS MOVIMENTO, SUM(BX_VALOR_LIQUIDO)
from FINANCEIRO
where STATUS_ID<>0 AND BX_VALOR_LIQUIDO<>0 AND BX_PAGAMENTO>='5/25/2010' AND BX_PAGAMENTO<='5/31/2010'
GROUP BY 1, CLASSIFICACAO_ID, DESCRICAO_ID, CLIENTE_ID
e me retornou o seguinte
Mas eu preciso do resultado
Movimento 1=446349,27
Movimento 2=3500,00
Movimento 3=1516,80
Gostei + 0
02/06/2010
Wilson Junior
SELECT CASE WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID = 2 THEN '1' WHEN CLASSIFICACAO_ID = 7 THEN '2' WHEN ((CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID = 1) OR (CLASSIFICACAO_ID = 16 AND DESCRICAO_ID = 1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE = 'C')) THEN '3' ELSE '0' END AS Movimento, SUM(CASE WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID = 2 THEN BX_VALOR_LIQUIDO WHEN CLASSIFICACAO_ID = 7 THEN BX_VALOR_LIQUIDO WHEN ((CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID = 1) OR (CLASSIFICACAO_ID = 16 AND DESCRICAO_ID = 1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE = 'C')) THEN BX_VALOR_LIQUIDO ELSE BX_VALOR_LIQUIDO END) AS Valor FROM FINANCEIRO WHERE STATUS_ID <> 0 AND BX_VALOR_LIQUIDO <> 0 AND BX_PAGAMENTO >= '5/25/2010' AND BX_PAGAMENTO <= '5/31/2010' GROUP BY 1
Espero ter colaborado.
Gostei + 0
02/06/2010
Emerson Nascimento
select
CASE
WHEN (F.CLASSIFICACAO_ID NOT IN (7,16)) AND F.DESCRICAO_ID=2 THEN '1'
WHEN F.CLASSIFICACAO_ID=7 THEN '2'
WHEN ((F.CLASSIFICACAO_ID NOT IN (7,16)) AND F.DESCRICAO_ID=1) OR
(F.CLASSIFICACAO_ID=16 AND F.DESCRICAO_ID=1 AND CF.MODALIDADE = 'C') THEN '3'
END AS MOVIMENTO,
SUM(F.BX_VALOR_LIQUIDO)
from
FINANCEIRO F
left join
CLIFOR CF on CF.ID = F.CLIENTE_ID
where
F.STATUS_ID<>0 AND F.BX_VALOR_LIQUIDO<>0
AND F.BX_PAGAMENTO>='5/25/2010' AND F.BX_PAGAMENTO<='5/31/2010'
group by
1, F.CLASSIFICACAO_ID, F.DESCRICAO_ID
Gostei + 0
02/06/2010
Rodrigo Pagani
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Só passa se eu colocar
group by 1, CLASSIFICACAO_ID, DESCRICAO_ID, CLIENTE_ID
Mas dai o resultado dá o mesmo que eu postei a imagem
Utilizando subselect tem como de resolver isso?
Gostei + 0
02/06/2010
Rodrigo Pagani
select
CASE
WHEN (F.CLASSIFICACAO_ID NOT IN (7,16)) AND F.DESCRICAO_ID=2 THEN '1'
WHEN F.CLASSIFICACAO_ID=7 THEN '2'
WHEN ((F.CLASSIFICACAO_ID NOT IN (7,16)) AND F.DESCRICAO_ID=1) OR
(F.CLASSIFICACAO_ID=16 AND F.DESCRICAO_ID=1 AND CF.MODALIDADE = 'C') THEN '3'
END AS MOVIMENTO,
SUM(F.BX_VALOR_LIQUIDO)
from
FINANCEIRO F
left join
CLIFOR CF on CF.ID = F.CLIENTE_ID
where
F.STATUS_ID<>0 AND F.BX_VALOR_LIQUIDO<>0
AND F.BX_PAGAMENTO>='5/25/2010' AND F.BX_PAGAMENTO<='5/31/2010'
group by
1, F.CLASSIFICACAO_ID, F.DESCRICAO_ID
Deu certo group by 1
Obrigado pela ajuda, esse select é para um relatório, vou finalizar o relatório para ver se deu tudo certo
Mais uma vez Obrigado
Gostei + 0
02/06/2010
Wilson Junior
SELECT Movimento, SUM(Valor) AS ValorSoma FROM (SELECT CASE WHEN (CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID = 2 THEN '1' WHEN CLASSIFICACAO_ID = 7 THEN '2' WHEN ((CLASSIFICACAO_ID NOT IN (7,16)) AND DESCRICAO_ID = 1) OR (CLASSIFICACAO_ID = 16 AND DESCRICAO_ID = 1 AND CLIENTE_ID IN (SELECT ID FROM CLIFOR WHERE MODALIDADE = 'C')) THEN '3' ELSE '0' END AS Movimento, BX_VALOR_LIQUIDO AS Valor FROM FINANCEIRO WHERE STATUS_ID <> 0 AND BX_VALOR_LIQUIDO <> 0 AND BX_PAGAMENTO >= '5/25/2010' AND BX_PAGAMENTO <= '5/31/2010') GROUP BY 1
Espero ter colaborado.
Gostei + 0
03/06/2010
Rodrigo Pagani
Estou fazendo um novo select para outro relatorio
SELECT DATA, SUM(ENTRADA) AS ENTRADA
FROM (SELECT BX_PAGAMENTO AS DATA,
CASE WHEN (REG_DELETED=0 AND STATUS_ID<>0 AND MOVIMENTO_ID=2 AND DESCRICAO_ID=1) THEN BX_VALOR_LIQUIDO ELSE 0 END AS ENTRADA,
CASE WHEN (REG_DELETED=0 AND STATUS_ID<>0 AND MOVIMENTO_ID=2 AND DESCRICAO_ID=2) THEN BX_VALOR_LIQUIDO ELSE 0 END AS SAIDA,
MOVIMENTO_ID AS MOVIMENTO
FROM
FINANCEIRO)
WHERE MOVIMENTO=2
GROUP BY DATA
o resultado ele me traz
Data Entrada
24/05/2010 1298,53
25/05/2010 66,00
assim vai
Mas eu preciso do resultado assim
Data Entrada Total
24/05/2010 1298,53 1298,53
25/05/2010 66,00 1364,53
Preciso do campo Total e ele vai somando o total que eu tenho
Você pode me dar mai essa ajuda?
Gostei + 0
04/06/2010
Emerson Nascimento
SELECT
BX_PAGAMENTO AS DATA,
CASE WHEN DESCRICAO_ID=1 THEN BX_VALOR_LIQUIDO ELSE 0 END AS ENTRADA,
CASE WHEN DESCRICAO_ID=2 THEN BX_VALOR_LIQUIDO ELSE 0 END AS SAIDA
FROM
FINANCEIRO
WHERE
REG_DELETED = 0 AND STATUS_ID <> 0 AND MOVIMENTO_ID = 2
GROUP BY
BX_PAGAMENTO
Gostei + 0
04/06/2010
Rodrigo Pagani
Gostei + 0
05/06/2010
Eduardo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)