Usuário com melhor resposta
Retornando 0 ao invés de NULL

Pergunta
-
Bom dia galera estou com um problemas com uma query:
SELECT C.NOME, (SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI ) AS AMBIENTE, (SELECT COUNT(AN.ANUNCIANTE_ID)FROM ANUNCIANTES AN WHERE AN.ID_CLI = C.ID_CLI )AS ANUNCIANTES, (SELECT (SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI) * (SELECT VALOR FROM PLAYLIST)) AS TOTAL, R.REPRES_ID FROM CLIENTES C , REPRESENTANTES R WHERE R.REPRES_ID = 1
que esta me retornando os seguintes valores:
a coluna TOTAL esta retornando NULL devido ainda não ter valores preenchidos nas colunas da operação de multiplicação,
gostaria de saber se seria possível retornar 0 ao invés de NULL ?
Rodrigo de Farias
Respostas
-
Sim, é possível.
Podes usar o ISNULL(coluna, 0) em que retorna 0 sempre que o valor da coluna for NULL, exemplo:
Deverá ser assim:
SELECT C.NOME,
(SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI ) AS AMBIENTE,
(SELECT COUNT(AN.ANUNCIANTE_ID)FROM ANUNCIANTES AN WHERE AN.ID_CLI = C.ID_CLI )AS ANUNCIANTES,
ISNULL((SELECT (SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI) * (SELECT VALOR FROM PLAYLIST)), 0) AS TOTAL,
R.REPRES_ID
FROM CLIENTES C ,
REPRESENTANTES R
WHERE R.REPRES_ID = 1Espero ter ajudado.
Pedro Martins
Portugal
https://www.linkedin.com/in/rechousa- Marcado como Resposta Rodrigo de Farias terça-feira, 2 de abril de 2013 14:20
-
Já agora, para não estares a calcular duas vezes os campos AMBIENTE e ANUNCIANTES, podes mudar a query da seguinte forma:
SELECT NOME, AMBIENTE, ANUNCIANTES, ISNULL((AMBIENTE * ANUNCIANTES), 0) AS TOTAL, REPRES_ID
FROM
(
SELECT C.NOME,
(SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI ) AS AMBIENTE,
(SELECT COUNT(AN.ANUNCIANTE_ID)FROM ANUNCIANTES AN WHERE AN.ID_CLI = C.ID_CLI )AS ANUNCIANTES,
R.REPRES_ID
FROM CLIENTES C,
REPRESENTANTES R
WHERE R.REPRES_ID = 1
) APedro Martins
Portugal
https://www.linkedin.com/in/rechousa- Marcado como Resposta Rodrigo de Farias terça-feira, 2 de abril de 2013 14:20
Todas as Respostas
-
Sim, é possível.
Podes usar o ISNULL(coluna, 0) em que retorna 0 sempre que o valor da coluna for NULL, exemplo:
Deverá ser assim:
SELECT C.NOME,
(SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI ) AS AMBIENTE,
(SELECT COUNT(AN.ANUNCIANTE_ID)FROM ANUNCIANTES AN WHERE AN.ID_CLI = C.ID_CLI )AS ANUNCIANTES,
ISNULL((SELECT (SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI) * (SELECT VALOR FROM PLAYLIST)), 0) AS TOTAL,
R.REPRES_ID
FROM CLIENTES C ,
REPRESENTANTES R
WHERE R.REPRES_ID = 1Espero ter ajudado.
Pedro Martins
Portugal
https://www.linkedin.com/in/rechousa- Marcado como Resposta Rodrigo de Farias terça-feira, 2 de abril de 2013 14:20
-
Já agora, para não estares a calcular duas vezes os campos AMBIENTE e ANUNCIANTES, podes mudar a query da seguinte forma:
SELECT NOME, AMBIENTE, ANUNCIANTES, ISNULL((AMBIENTE * ANUNCIANTES), 0) AS TOTAL, REPRES_ID
FROM
(
SELECT C.NOME,
(SELECT COUNT(AM.AMBIENTE_ID)FROM AMBIENTES AM WHERE C.ID_CLI = AM.ID_CLI ) AS AMBIENTE,
(SELECT COUNT(AN.ANUNCIANTE_ID)FROM ANUNCIANTES AN WHERE AN.ID_CLI = C.ID_CLI )AS ANUNCIANTES,
R.REPRES_ID
FROM CLIENTES C,
REPRESENTANTES R
WHERE R.REPRES_ID = 1
) APedro Martins
Portugal
https://www.linkedin.com/in/rechousa- Marcado como Resposta Rodrigo de Farias terça-feira, 2 de abril de 2013 14:20
-