[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