none
Erro no mes de Fevereiro RRS feed

  • Pergunta

  • Prezados bom dia !

    a Sql Abaixo me esta funcinando normalmente porem quando coloco no parametro a mes de fevereiro ele me apresenta erro.

    SQL

    SELECT I.PATRIMONIO,
           I.DESCRICAO,
           F.NOME,
           I.NUMERODOCUMENTO,
           I.DTAQUISICAO,
           I.VRAQUISICAO,  
     (case when  I.DTAQUISICAO < '2010-12-31' then I.VRAQUISICAO
              when I.DTAQUISICAO > '2011-01-01' then I2.DEPRECINDICE
              else 0
         end) as RONNIE,
          isnull((select DISTINCT b.DEPRECINDICE
                   from IRAZAO as b
                   where b.CODBEM = i.CODBEM
                     and (((datepart(year, b.data)*1000)+datepart(month, b.data)) =
     ((datepart(year, DATEADD(month, -1, I2.data))*1000)+datepart(month, DATEADD(month, -1, I2.data))))), 0) anterior,
        I2.DEPRECINDICE,
    I2.DEPMESINDICE,
    I.CODCCUSTOATUAL,
    I.CODCONTAS  AS CONTAS$,
    G.DESCRICAO,
    datepart(month,I2.DATA),
           datepart(YEAR,I2.DATA)


    FROM IBEM AS I
    LEFT JOIN FCFO      AS F  ON F.CODCOLIGADA  = I.CODCOLIGADA AND F.CODCFO    = I.CODFORNEC
    LEFT  JOIN IRAZAO    AS I2 ON I2.CODCOLIGADA = I.CODCOLIGADA AND I2.CODBEM   = I.CODBEM
    LEFT JOIN IGRPCONT  AS G  ON G.CODCOLIGADA  = I.CODCOLIGADA AND G.CODGRUPO  = I.CODCONTAS


    WHERE   I.DTAQUISICAO >= '1996-01-01' AND I.DTAQUISICAO <= '2010-12-31'
    AND  datepart(month,DATA) = '02'

    AND I.PATRIMONIO = '00118'
    ORDER BY CONTAS$,I.DTAQUISICAO

     

    Erro

    Msg 512, Level 16, State 1, Line 1
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

     

    Prezados eu achei aonde esta o erro, porem nao sei por que somente ocorre para mes de FEVEREIRO.

    VEJAM

     /* isnull((select DISTINCT b.DEPRECINDICE
                   from IRAZAO as b
                   where b.CODBEM = i.CODBEM
                     and (((datepart(year, b.data)*1000)+datepart(month, b.data)) =
     ((datepart(year, DATEADD(month, -1, I2.data))*1000)+datepart(month, DATEADD(month, -1, I2.data))))), 0) anterior,*/

     

    Obrigado a todos pela ajuda.

    sexta-feira, 9 de dezembro de 2011 13:47

Respostas

  • Ronnie,

     

    Se para todos os outros meses esta funcionando normalmente, provavelmente para o mes de fevereiro voce esta com alguma diferença nos dados, pois para ele, alguma das subquerys esta retornando mais de um valor, tente executar manualmente todas elas e ver qual esta impactando seu sleect.

     

    Lembrando que querys podem sim retornar mais de um valor, ou seja, uma lista, mas para isso voce devera utilizar operadores como IN, NOT IN, EXISTS, NOT EXISTS.

    E obviamente no select, apenas 1 valor.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    sexta-feira, 9 de dezembro de 2011 13:49
    Moderador