none
URGENTE erro Sqlserver no SUM para colunas repetidas RRS feed

  • Pergunta

  •  

    Pessoal, tenho a seguinte procedure

     

    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_NULLS ON
    GO


    execute sp_relatorio_bc_soma

    ALTER     procedure [dbo].[sp_relatorio_bc_soma] as

    DECLARE
    --       @data_atual AS varchar(5),
     --      @mes_atual as varchar(20),
           @CNL AS VARCHAR(50),
           @status as varchar(3),
           @servico as varchar(3),
           @relatorio as varchar(2),
           @total AS INT,
           @sql NVARCHAR(1000)

    DECLARE CRS_Soma CURSOR FAST_FORWARD FOR

    select CNL, status, servico, relatorio, sum(isnull(mes,0)) AS total
    from (
    select CNL, status, servico, relatorio, isnull(M1_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    union
    select CNL, status, servico, relatorio, isnull(M2_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    union
    select CNL, status, servico, relatorio, isnull(M3_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M4_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M5_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M6_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M7_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M8_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M9_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M10_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M11_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    UNION
    select CNL, status, servico, relatorio, isnull(M12_2008,0) AS MES
    from relatorio_rdbc_sumario_mensal
    ) a
    where cnl <> ''
    group by CNL,status, servico, relatorio

    OPEN CRS_SOMA
    FETCH NEXT FROM CRS_SOMA INTO @CNL, @status, @servico, @relatorio,  @TOTAL

    WHILE @@FETCH_STATUS = 0
     BEGIN
     
     SET @sql = 'update relatorio_rdbc_sumario_mensal set total  = ' + CONVERT(VARCHAR, @TOTAL) +
       ' where CNL = ''' + @CNL + '''' +
                            ' and status = ' + char(39) + @status + char(39) +
                            ' and servico = ' + char(39) + @servico + char(39) +
                            ' and relatorio = ' + char(39) + @relatorio + char(39)


     EXEC (@sql)
     
     FETCH NEXT FROM CRS_SOMA INTO @CNL, @status, @servico,@relatorio, @TOTAL
    END

    CLOSE CRS_SOMA
    DEALLOCATE CRS_SOMA

     

    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO



    Quando eu executo a soma....a procedure esta errando quando duas colunas tem valores iguais

    Exemplo.:

     

    m1_2008  M2_2008  .... tOTAL (campo q recebe o total de todas as colunas)

      26             26                 26

     

    outro exemplo

    M1_2008   m2_2008    ... TOTAL

      2                 10                12

     

     

    Alguem tem ideia do q pode estar provocando esse erro?

     

    acredito que o erro possa estar na query. Mas nao entendo pq.

    quarta-feira, 14 de janeiro de 2009 22:00

Respostas

  • Olá esquerdo, vc já tentou utilizar o "union all" ao invés de só "union", pois, o "union all" não realiza um merge em dados repetidos.

    quarta-feira, 14 de janeiro de 2009 22:14

Todas as Respostas

  • Olá esquerdo, vc já tentou utilizar o "union all" ao invés de só "union", pois, o "union all" não realiza um merge em dados repetidos.

    quarta-feira, 14 de janeiro de 2009 22:14
  •  

    Emanuel, vc me salvou !

     

    Voce nao tem noção de quanto estou grato por sua ajuda.

     

    FUNCIONOU!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

     

    Que Deus t pague em dobro!

     

    E quando vier ao Rio de Janeiro me avise que eu te pago um almoço!

     

    forte abraço, sucesso!

     

     

    quarta-feira, 14 de janeiro de 2009 22:20
  • rsrssr....Blz Daniel, vc já pagou com o seu feedback, valeu.

    Quando eu for no Rio quero almoçar no "Cipriani", pode deixar que eu te chamo pra vc pagar um almoço pra mim.rsrsrs.

     

    Abs.

     

     

    quarta-feira, 14 de janeiro de 2009 22:31
  •  

    Cara vc se incomodaria de me passar seu msn ?

     

    Ou email....

     

    qualquer coisa...pra manter contato....pode deixar q nao vou ficar te perturbando nao...mas as vezes no sufoco a gente precisa de um amigo pra dar um help..

     

     

    abs

     

     

    quarta-feira, 14 de janeiro de 2009 22:34
  • Blz, pode contar comigo.

    quarta-feira, 14 de janeiro de 2009 22:38