[firebase-br] sum x case..when x null
Alexandre Sousa
dave.malkavian em gmail.com
Qui Fev 4 14:04:57 -03 2010
Não sei se ja mandaram assim, mas acredito que o erro está nos parenteses:
SELECT
CASE WHEN
(TESTVAL1 > 0)
THEN
SUM(TESTVAL2 / TESTVAL1)
ELSE
SUM(TESTVAL2)
END AS TOTAL
FROM
TEST
WHERE
NOT TESTVAL1 IS NULL
GROUP BY
TESTVAL1,
TESTVAL2
Pela sequencia o NOT só estava negando o NULL, não o maior que zero. E
outra: não precisa verificar se o testval is null, pois no where ja está
pedindo para trazer só quem tem valor.
[]'s
Alexandre Sousa
----- Original Message -----
From: "Kelver Merlotti" <kmerlotti em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Wednesday, February 03, 2010 5:14 PM
Subject: [firebase-br] sum x case..when x null
Fala galera, boa tarde!
Tive de alterar um select aqui no sistema pois estava apresentando
erro e me surgiu uma dúvida, pois aparentemente a forma como estava
deveria funcionar.
Considere a tabela:
CREATE TABLE TEST (
TESTVAL1 FLOAT,
TESTVAL2 FLOAT
);
E os dados:
INSERT INTO TEST (TESTVAL1, TESTVAL2) VALUES (0, 1);
INSERT INTO TEST (TESTVAL1, TESTVAL2) VALUES (0, 10);
INSERT INTO TEST (TESTVAL1, TESTVAL2) VALUES (0, 5);
INSERT INTO TEST (TESTVAL1, TESTVAL2) VALUES (0, 1.25);
INSERT INTO TEST (TESTVAL1, TESTVAL2) VALUES (0, 5);
INSERT INTO TEST (TESTVAL1, TESTVAL2) VALUES (NULL, 50);
Observação: Atente-se ao último registro, que tem o TESTVAL1 como NULL!
O seguinte select funciona perfeitamente, sem erro:
SELECT
SUM(
CASE WHEN
NOT TESTVAL1 IS NULL AND
TESTVAL1 > 0
THEN
TESTVAL2 / TESTVAL1
ELSE
TESTVAL2
END) AS TOTAL
FROM
TEST
WHERE
NOT TESTVAL1 IS NULL
GROUP BY
TESTVAL1,
TESTVAL2
Agora, este select também não deveria ser executado sem erros?
SELECT
CASE WHEN
NOT TESTVAL1 IS NULL AND
TESTVAL1 > 0
THEN
SUM(TESTVAL2 / TESTVAL1)
ELSE
SUM(TESTVAL2)
END AS TOTAL
FROM
TEST
WHERE
NOT TESTVAL1 IS NULL
GROUP BY
TESTVAL1,
TESTVAL2
O erro é o tradicional "arithmetic overflow or division by zero has
occurred", bem provavelmente pela tentativa da divisão do TESTVAL2 por
um TESTVAL1 NULL.
Desde já, obrigado.
Abraços!
Kelver Merlotti
Coordenador Editorial do Portal www.ActiveDelphi.com.br
Contato: kelver em activedelphi.com.br
Google: kmerlotti em gmail.com
Twitter: http://twitter.com/kmerlotti
Tem um segundo? Então, dá uma olhadinha nisso:
Um site de publicidades, de Portugal, está pagando em euros (quase 3x
mais que em reais) pra quem estiver disposto a:
* Ler anúncios
* Visitar sites
* Clicar em banners
* Navegar na NET
* Ler e-mails
* Convidar novos usuários
O pagamento pode ser feito de várias formas!
Registra lá. Não custa nada!!! ;-)
http://www.publipt.com/pages/index.php?refid=kmerlotti
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista