none
Cálculo incorrecto en una consulta SQL RRS feed

  • Pregunta

  • Hola a todos,

    Tengo la siguiente consulta de SQL:

    SELECT        Horas, PrecioCoste, Facturacion, (Horas * PrecioCoste) AS Cost,
                                 (SELECT        SUM(Horas * PrecioCoste) AS Expr1
                                   FROM            dbo.Auxiliar AS F1
                                   WHERE        ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar])) -
                                 (SELECT        SUM(Horas * PrecioCoste) AS Expr1
                                   FROM            dbo.Auxiliar AS F2
                                   WHERE        ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar]) AND (CodConcepto IN     

    ('FF1', 'FF2', 'FF3', 'FF4', 'FF5') OR ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar]) AND (Descripcion = 'REN')) AS TmpCost,
                                 (SELECT        SUM(Facturacion) AS Expr1
                                   FROM            dbo.Auxiliar AS F3
                                   WHERE        ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar])) -
                                 (SELECT        SUM(Facturacion) AS Expr1
                                   FROM            dbo.Auxiliar AS F4
                                   WHERE        ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar]) AND (CodConcepto IN ('FF1', 'FF2', 'FF3', 'FF4', 'FF5')) OR ([Cod_ cliente a facturar] = dbo.Auxiliar.[Cod_ cliente a facturar]) AND (Descripcion = 'REN')) AS TmpFact, CASE WHEN [CodConcepto] IN ('FF1', 'FF2', 'FF3', 'FF4S', 'FF5') THEN [Facturacion] ELSE ((Horas * PrecioCoste) *
                                 (SELECT        SUM(Facturacion) AS Expr1
                                   FROM            dbo.Auxiliar AS F3
                                   WHERE        ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar])) -
                                 (SELECT        SUM(Facturacion) AS Expr1
                                   FROM            dbo.Auxiliar AS F4
                                   WHERE        ([Cod_ cliente a facturar] = dbo.Auxiliar .[Cod_ cliente a facturar]) AND (CodConcepto IN ('FF1', 'FF2', 'FF3', 'FF4', 'FF5')) OR ([Cod_ cliente a facturar] = dbo.Auxiliar.[Cod_ cliente a facturar]) AND (Descripcion = 'REN'))) END AS Rendimiento
    FROM            dbo.Auxiliar 

    Y el resultado que obtengo es el siguiente:

    Todo correcto excepto el campo Rendimiento, que tendría que ser según su fórmula (Cost * TmpFact):

    Cost TmpFact Rendimiento
    20 754 15080
    20 754 15080
    37,5 754 28275
    36 754 27144
    40 754 30160
    12,5 754 9425
    20 754 15080

    Nota: el primer caso del campo calculado Rendimiento es correcto, es decir, CASE WHEN [CodConcepto] IN ('FF1', 'FF2', 'FF3', 'FF4S', 'FF5') THEN [Facturacion] es correcto el resultado que da para el campo Rendimiento.

    ¿Porqué no calcula correctamente el otro caso si el valor del campo Cost y el valor del campo TmpFact son correctos por separado?

    Gracias.

    viernes, 8 de junio de 2018 9:40