none
Crear campo calculado con decimales

    Question

  • Hola a tod@s,

         tengo la siguiente consulta:

    SELECT     dbo.VerTodo.tipoFull, COUNT(dbo.VerTodo.tipoFull) AS numPaquetes, SUM(dbo.VerTodo.tamañoPaquete) AS sumaDatoEthernet,
                          AVG(dbo.VerTodo.tamañoPaquete) AS [Media %], MIN(dbo.VerTodo.fecha) AS primeraFecha, MAX(dbo.VerTodo.fecha) AS ultimaFecha,
                          CAST(SUM(dbo.VerTodo.tamañoPaquete) / dbo.TotalTamañoPaquete.TotalTamañoPaquete AS FLOAT) AS [%],
                          dbo.TotalTamañoPaquete.TotalTamañoPaquete, SUM(dbo.VerTodo.tamañoPaquete)
                          * 100 / dbo.TotalTamañoPaquete.TotalTamañoPaquete AS [%2]
    FROM         dbo.VerTodo CROSS JOIN
                          dbo.TotalTamañoPaquete
    GROUP BY dbo.VerTodo.tipoFull, dbo.TotalTamañoPaquete.TotalTamañoPaquete

    Si os fijais en las expresiones % y %2, me devuelve números enteros y a mi me gustaria que me devolviese por lo menos dos decimales.

    Como puedo haces que una expresion devuelva un número con decimales???????
    Tuesday, May 15, 2007 6:25 AM

Answers

  • Te pongo un ejemplo sencillo, de una tabla con el campo Cantidad / 100, en la que muestro 2 decimales:

     

    select CAST(CAST(Cantidad AS DECIMAL(10,5)) / 100 AS DECIMAL(10,2)) as CampoCalculado from Tabla

     

    El problema que tienes reside en convertir el campo a dividir en decimal, préviamente a la división. En este momento ya aplica una división con decimales, pero si queremos controlar los decimales a mostrar, debemos volver a convertir la cantidad resultante.

     

    Un saludo!

    Tuesday, May 15, 2007 7:34 AM
    Moderator

All replies

  • Te pongo un ejemplo sencillo, de una tabla con el campo Cantidad / 100, en la que muestro 2 decimales:

     

    select CAST(CAST(Cantidad AS DECIMAL(10,5)) / 100 AS DECIMAL(10,2)) as CampoCalculado from Tabla

     

    El problema que tienes reside en convertir el campo a dividir en decimal, préviamente a la división. En este momento ya aplica una división con decimales, pero si queremos controlar los decimales a mostrar, debemos volver a convertir la cantidad resultante.

     

    Un saludo!

    Tuesday, May 15, 2007 7:34 AM
    Moderator
  • con FLOAT funciona, pero no le pued especifivar el nº de decimales, y si utilizo DECIMAL sin la longidud me salen todos los decimales, la sentencia que he puesto es la siguiente:

     

    CAST(SUM(dbo.VerTodo.tamañoPaquete) AS DECIMAL) / CAST(dbo.TotalTamañoPaquete.TotalTamañoPaquete AS DECIMAL)

     

    pero si intento ponerne esta:

     

    CAST(SUM(dbo.VerTodo.tamañoPaquete) AS DECIMAL(10,2)) / CAST(dbo.TotalTamañoPaquete.TotalTamañoPaquete AS DECIMAL(10,2))

     

    me da error de sintaxis cuando creo la vista en el explorado de base de datos o en el SQL Server Management Studio Express

     

    que estoy haciendo mal

     

     

     

    Tuesday, May 15, 2007 8:49 AM
  • Yo repasaría que no hubiera alguna coma o paréntesis que la sentencia completa no te estuviera dando la lata. Yo en local he hecho una prueba y me funciona sin problemas...

     

    Un saludo!

    Tuesday, May 15, 2007 9:06 AM
    Moderator
  • pues la copio y la pego tal cual en una de las columnas de mi Vista mi de dice:

     

     

    "Falta lo expresion o no es valida"

     

    no se si será un tema de configuración, o que

    Tuesday, May 15, 2007 9:18 AM
  • Yo lo único raro que veo son las eñes, que no acostumbro a usarlas, pero que no debieran dar problemas a no ser que uses versiones no localizadas en español.

     

    Por lo demás... lo veo bien, y yo hago lo mismo con una tabla de pruebas que tengo en local, y funciona... ¿?¿?

     

    Tuesday, May 15, 2007 9:41 AM
    Moderator
  • pues no se, yo tambien,

     

    pero no te preocupes ya le quito los decimales desde el programa

     

    Muchas gracias.

    Tuesday, May 15, 2007 9:48 AM
  • Hola,

    Por que no pruebas multiplicando cada cantidad resultante por 1.00, a mi me funciona Wink

    Salu2
    Wednesday, May 16, 2007 11:29 AM