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

Convertir Formula en Resultado

Estas en el tema de Convertir Formula en Resultado en el foro de SQL Server en Foros del Web. Buenas Tardes gente. Esta vez vengo con una duda un poco complicada. Tengo una tabla DATOS y en ella existe una columna llamada FORMULA que ...
  #1 (permalink)  
Antiguo 18/01/2011, 13:41
Avatar de mauro_bernal_rios  
Fecha de Ingreso: abril-2008
Ubicación: Mendoza
Mensajes: 88
Antigüedad: 16 años
Puntos: 2
Convertir Formula en Resultado

Buenas Tardes gente.

Esta vez vengo con una duda un poco complicada.

Tengo una tabla DATOS y en ella existe una columna llamada FORMULA que guarda literalmente una fórmula algebraicas.

Por ej:
SELECT FORMULA from DATOS

FORMULA:
54,92+83,55+356,48+97,95+0+0
25,29+33,42+311,92+89,42+0+0
0+1589,63+0+124,34+300+0
25,29+33,42+311,92+89,42+0+0
69,85+116,97+267,36+92,76+0+0
0+911,38+0+124,34+60+0




Quisiera hacer un
SELECT FORMULA,RESULTADO from DATOS

Donde RESULTADO sería el resultado de esa operación antes descripta.

Alguna idea?


Por cierto trabajo con MICROSOFT SQL SERVER 2005 SP3
__________________
Mauro Bernal
Sistemas y Web
http://maurobernal.com.ar
[email protected]
  #2 (permalink)  
Antiguo 18/01/2011, 16:31
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Convertir Formula en Resultado

Solo para SQL 2005 o superior:
Código SQL:
Ver original
  1. DECLARE @datos TABLE(
  2.     formula VARCHAR(50)
  3. )
  4. INSERT INTO @datos VALUES('54,92+83,55+356,48+97,95+0+0')
  5. INSERT INTO @datos VALUES('25,29+33,42+311,92+89,42+0+0')
  6.  
  7. SELECT formula, SUM(CAST(REPLACE(VALUE,',','.') AS NUMERIC(20,2)))
  8. FROM @datos d
  9. CROSS APPLY dbo.Split(d.formula,'+') S
  10. GROUP BY formula
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 18/01/2011, 16:34
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Convertir Formula en Resultado

La funcion Split la encuentras aqui: http://www.devx.com/tips/Tip/20009
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #4 (permalink)  
Antiguo 18/01/2011, 16:41
Avatar de royrojas  
Fecha de Ingreso: diciembre-2004
Mensajes: 458
Antigüedad: 19 años, 3 meses
Puntos: 3
Respuesta: Convertir Formula en Resultado

Con una funcion SPLIT se podria hacer eso que quieres.

Paso 1. Creamos la funcion Split

Código:
CREATE FUNCTION SPLIT
(
 @s nvarchar(max),
 @splitChar nchar(1)
)
returns @t table (id int identity(1,1), val nvarchar(max))
as
begin

declare @i int, @j int
select @i = 0, @j = (len(@s) - len(replace(@s,@splitChar,'')))

;with cte 
as
(
 select
  i = @i + 1,
  s = @s, 
  n = substring(@s, 0, charindex(@splitChar, @s)),
  m = substring(@s, charindex(@splitChar, @s)+1, len(@s) - charindex(@splitChar, @s))

 union all

 select 
  i = cte.i + 1,
  s = cte.m, 
  n = substring(cte.m, 0, charindex(@splitChar, cte.m)),
  m = substring(
   cte.m,
   charindex(@splitChar, cte.m) + 1,
   len(cte.m)-charindex(@splitChar, cte.m)
 )
 from cte
 where i <= @j
)
insert into @t (val)
select pieces
from 
(
 select 
 ltrim(rtrim(case when i <= @j then n else m end)) pieces
 from cte
) t
where
 len(pieces) > 0
option (maxrecursion 0)

return

end

GO
Y luego la invocas

select SUM(cast(val as decimal(10,2))) from dbo.SPLIT('54.2 + 83 + 356 + 97','+')

Si bien aqui lo hace para esta linea, lo ideal seria que la misma funcion retorne ya el valor de la suma. Entonces en ese caso solamente modificas la funcion para que en lugar de que te retorne una tabla, te retorne un decimal con el resultado.

y solamente harias algo como asi

SELECT FORMULA, dbo.SumaFormula(FORMULA) as RESULTADO from DATOS
__________________
roy rojas
Programación en Español: DotNetcr.com
  #5 (permalink)  
Antiguo 20/01/2011, 08:21
Avatar de mauro_bernal_rios  
Fecha de Ingreso: abril-2008
Ubicación: Mendoza
Mensajes: 88
Antigüedad: 16 años
Puntos: 2
Respuesta: Convertir Formula en Resultado

Se me había ocurrido hacerlo con SPLIT, pero en mi caso soy externo y no quería meter ninguna función. Pero veo que no queda otra...

Muchas Gracias... Ahora... a probar !!!
__________________
Mauro Bernal
Sistemas y Web
http://maurobernal.com.ar
[email protected]
  #6 (permalink)  
Antiguo 20/01/2011, 08:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Convertir Formula en Resultado

Otra opcion podria ser usar una tabla temporal, y ahi ir separando en columnas los sumandos si la cantidad de estos es siempre la misma, en tu caso 6 columnas.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.

Etiquetas: 2005, server, sql
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:14.