Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Perdida de decimales en SQL Server 2005

Estas en el tema de Perdida de decimales en SQL Server 2005 en el foro de SQL Server en Foros del Web. Hola amigos, Espero que todos estén bien. Tengo un problema para llenar una tabla para la cual ocupo el query de abajo, pero el resultado ...
  #1 (permalink)  
Antiguo 21/07/2011, 16:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 8 meses
Puntos: 1
Pregunta Perdida de decimales en SQL Server 2005

Hola amigos,

Espero que todos estén bien.

Tengo un problema para llenar una tabla para la cual ocupo el query de abajo, pero el resultado debe mostrar hasta 10 decimales y solo me muestra 6 y me pierden los demas digitos, apesar q el tipo de dato es al crear la tabla le puse decimal(20,10), aparte que le hago un round([variable],10).... no se que mas hacer!!!!.

Ya revisé toda la documentación de sql en linea y no encuentro nada que me de la solución.... si alguien la tiene, por favor, ayudame!!!! Hoy por mi, mañana por todos. Namaste.

El query es el siguiente:

Código SQL:
Ver original
  1. SELECT  tiempo.max_fecha,
  2.     precios.id_categoria,
  3.     dim_cate.id_linea,
  4.     precios.precio,
  5.     costos.costo_total,
  6.     CASE WHEN (costos.costo_total IS NULL OR costos.costo_total=0) THEN 0 ELSE (round(precios.precio,10)/round(costos.costo_total,10)) END
  7.     AS fact_util_fijo,
  8.     ctrl.cve_usuario,
  9.     getdate() AS fecha_act
  10.     FROM    H_LISTA_PRECIOS_GRUPO_VIGENCIA precios,
  11.     CAT_CONCEPTO_LISTA_PRECIOS_GRUPO cat,
  12.     (SELECT MIN(fecha) min_fecha,
  13.         MAX(fecha) max_fecha
  14.         FROM DIM_TIEMPO
  15.         WHERE mes ='201103'
  16.     ) tiempo,
  17.     (SELECT pre.id_categoria,
  18.         MIN(cat.prioridad) AS min_prio        
  19.         FROM    H_LISTA_PRECIOS_GRUPO_VIGENCIA pre,
  20.             CAT_CONCEPTO_LISTA_PRECIOS_GRUPO cat
  21.         WHERE   pre.id_lista_precios = cat.id_lista_precios
  22.         AND cat.tipo_precio='CONCESIONARIO'
  23.         GROUP BY    pre.id_categoria
  24.     )min_prioridad,
  25.     (SELECT costos.id_categoria,
  26.         round(costos.costo_total,10) AS costo_total
  27.         FROM    H_COSTOS_RFU_GRUPO costos,
  28.               (SELECT   hcrg.id_categoria,
  29.             MAX(periodo) AS periodo
  30.             FROM    H_COSTOS_RFU_GRUPO hcrg
  31.             WHERE periodo = '201103'
  32.             GROUP BY    hcrg.id_categoria
  33.               ) maximo
  34.                    WHERE    maximo.id_categoria = costos.id_categoria
  35.                       AND maximo.periodo = costos.periodo
  36.     ) costos,
  37.     DIM_CATEGORIAS dim_cate,
  38.     RENT_CONTROL_PROCESOS ctrl
  39.     WHERE   precios.id_lista_precios = cat.id_lista_precios
  40.     AND cat.tipo_precio='CONCESIONARIO'
  41.     AND dim_cate.id_categoria = precios.id_categoria
  42.     AND precios.id_categoria = min_prioridad.id_categoria
  43.     AND precios.id_categoria = costos.id_categoria
  44.     AND precios.clave_moneda = 'MXN'
  45.     AND cat.prioridad=min_prioridad.min_prio
  46.     AND precios.fecha_ini_vigencia <= tiempo.max_fecha
  47.     AND precios.fecha_fin_vigencia IS NULL
  48.     AND ctrl.proceso ='FACTOR_UTILIDAD_GRUPO'
  49.     AND ctrl.tipo_carga ='SQL'
  50.     AND ctrl.activo = 1
  51. ORDER BY precios.id_categoria

Un fragmento del resultado que me da el query, para que se entienda mejor, es:
id_categoria
3183

precio
3802.1400

costo_total
3573.74

fact_util_fijo
1.063910

El mismo fragmento de la tabla ya que se llena con el query de arriba, es:
ID_CATE
3183

PRECIO
3802.1400

COSTO_TOTAL
3573.74

FACT_UT_FIJO
1.0639100000

Cuando el resultado debe ser:
ID_CATE
3183

PRECIO
3802.1400

COSTO_TOTAL
3573.74

FACT_UT_FIJO
1.0639106370


Muchisimas Gracias por su ayuda.
Marsh_Spider
  #2 (permalink)  
Antiguo 22/07/2011, 07:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 2 meses
Puntos: 774
Respuesta: Perdida de decimales en SQL Server 2005

Es un campo calculado el que quieres obtener, ya probaste haciendo un cast??

seria algo mas o menos asi:

cast(isnull(campo,0)/cast(isnull(campo,0) as decimal(10,10)) as decimal (10,10))


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/07/2011, 10:54
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Perdida de decimales en SQL Server 2005

Esto dara enteros: select 10/9

Si se desean decimales: SELECT 10.0/9.0
__________________
MCTS Isaias Islas

Etiquetas: case, perdida, select, server, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:58.