none
Retornando 0 ao invés de NULL RRS feed

  • 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

    terça-feira, 2 de abril de 2013 13:47

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 = 1

    Espero ter ajudado.


    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    terça-feira, 2 de abril de 2013 14:07
  • 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
    ) A


    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    terça-feira, 2 de abril de 2013 14:10

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 = 1

    Espero ter ajudado.


    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    terça-feira, 2 de abril de 2013 14:07
  • 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
    ) A


    Pedro Martins
    Portugal
    https://www.linkedin.com/in/rechousa

    terça-feira, 2 de abril de 2013 14:10
  • Brother... valeu mesmo funcionou certinho e obrigado pelas dicas.

    Rodrigo de Farias

    terça-feira, 2 de abril de 2013 14:20