Utilizar mi campo creado

28/12/2003 - 03:44 por RICARDO URIBE | Informe spam
Por ejemplo tengo esta vista, en cual creo campos basandome en el calculo de
uno o mas campos, pero se fijan que tengo que calcular para cada calculo que
nuevo que
que quiero hacer , por ejemplo creo el campo Descuento, despues para usar
ese campo en otra operacion tengo que poner todo el calculo y la operacion.

SELECT dbo.OrdenCompraDetalles.SerieOrdenCompra,
dbo.OrdenCompraDetalles.NumeroOrdenCompra,
dbo.OrdenCompraDetalles.CodigoProducto,
dbo.Productos.NombreProducto, dbo.Productos.Unidad,
dbo.OrdenCompraDetalles.Cantidad, dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio AS VentaBruta, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4,
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3, dbo.OrdenCompraDetalles.D4) AS Descuento,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4) AS ValorVenta,
(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4)) * 0.19 AS IGV
FROM dbo.OrdenCompraDetalles INNER JOIN
dbo.Productos ON
dbo.OrdenCompraDetalles.CodigoProducto = dbo.Productos.CodigoProducto

Mi pregunta es, no hay una forma de usar ese campo que ya esta creado, no se
tal vez mandarlo a una variable, porque esto pienso convertirlo en un
Procedimiento Almacenado,
para no tener que estar poniendo toda la operacion cada vez que necesito ese
dato.

Gracias por su ayuda.

Preguntas similare

Leer las respuestas

#1 Maximiliano d. Accotto
28/12/2003 - 06:17 | Informe spam
Ricardo,

Lo que vos estas haciendo se podria hacer con algun campo calculado de tu
tabla (si es que esta lo tiene) si no queres usar Campos Calculados, no vas
a tener otra que repetir las cuentas, el alias no te lo toma por ahora Sql.

por ej:

Select precio_unit * cantidad as total,orden,proveedor
from OrdenDecompra where precio_unit * cantidad > 0

me explico?

Salu2



"RICARDO URIBE" escribió en el mensaje
news:
Por ejemplo tengo esta vista, en cual creo campos basandome en el calculo


de
uno o mas campos, pero se fijan que tengo que calcular para cada calculo


que
nuevo que
que quiero hacer , por ejemplo creo el campo Descuento, despues para usar
ese campo en otra operacion tengo que poner todo el calculo y la


operacion.

SELECT dbo.OrdenCompraDetalles.SerieOrdenCompra,
dbo.OrdenCompraDetalles.NumeroOrdenCompra,
dbo.OrdenCompraDetalles.CodigoProducto,
dbo.Productos.NombreProducto, dbo.Productos.Unidad,
dbo.OrdenCompraDetalles.Cantidad, dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio AS VentaBruta, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4,
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3, dbo.OrdenCompraDetalles.D4) AS Descuento,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4) AS ValorVenta,
(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4)) * 0.19 AS IGV
FROM dbo.OrdenCompraDetalles INNER JOIN
dbo.Productos ON
dbo.OrdenCompraDetalles.CodigoProducto = dbo.Productos.CodigoProducto

Mi pregunta es, no hay una forma de usar ese campo que ya esta creado, no


se
tal vez mandarlo a una variable, porque esto pienso convertirlo en un
Procedimiento Almacenado,
para no tener que estar poniendo toda la operacion cada vez que necesito


ese
dato.

Gracias por su ayuda.







Respuesta Responder a este mensaje
#2 Ricardo Uribe
28/12/2003 - 11:06 | Informe spam
Para mi pena, si te explicas, bueno voy tener que ver la otra de crear
funciones. A ver si puedo.
Gracias Max


"Maximiliano d. Accotto" escribió en el mensaje
news:
Ricardo,

Lo que vos estas haciendo se podria hacer con algun campo calculado de tu
tabla (si es que esta lo tiene) si no queres usar Campos Calculados, no


vas
a tener otra que repetir las cuentas, el alias no te lo toma por ahora


Sql.

por ej:

Select precio_unit * cantidad as total,orden,proveedor
from OrdenDecompra where precio_unit * cantidad > 0

me explico?

Salu2



"RICARDO URIBE" escribió en el mensaje
news:
> Por ejemplo tengo esta vista, en cual creo campos basandome en el


calculo
de
> uno o mas campos, pero se fijan que tengo que calcular para cada calculo
que
> nuevo que
> que quiero hacer , por ejemplo creo el campo Descuento, despues para


usar
> ese campo en otra operacion tengo que poner todo el calculo y la
operacion.
>
> SELECT dbo.OrdenCompraDetalles.SerieOrdenCompra,
> dbo.OrdenCompraDetalles.NumeroOrdenCompra,
> dbo.OrdenCompraDetalles.CodigoProducto,
> dbo.Productos.NombreProducto,


dbo.Productos.Unidad,
> dbo.OrdenCompraDetalles.Cantidad, dbo.OrdenCompraDetalles.Precio,
> dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio AS VentaBruta,


dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2,
> dbo.OrdenCompraDetalles.D3,
> dbo.OrdenCompraDetalles.D4,
> dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio, dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2,
> dbo.OrdenCompraDetalles.D3, dbo.OrdenCompraDetalles.D4) AS Descuento,
> dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio -
> dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio,
> dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
> dbo.OrdenCompraDetalles.D4) AS ValorVenta,
> (dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio -
> dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio,
> dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
> dbo.OrdenCompraDetalles.D4)) * 0.19 AS IGV
> FROM dbo.OrdenCompraDetalles INNER JOIN
> dbo.Productos ON
> dbo.OrdenCompraDetalles.CodigoProducto = dbo.Productos.CodigoProducto
>
> Mi pregunta es, no hay una forma de usar ese campo que ya esta creado,


no
se
> tal vez mandarlo a una variable, porque esto pienso convertirlo en un
> Procedimiento Almacenado,
> para no tener que estar poniendo toda la operacion cada vez que necesito
ese
> dato.
>
> Gracias por su ayuda.
>
>
>
>
>
>
>


Respuesta Responder a este mensaje
#3 Ricardo Uribe
28/12/2003 - 11:07 | Informe spam
Gracias Gustavo voy probar haciendo lo que me dices.

"Gustavo Larriera [MVP]" escribió en el
mensaje news:
Intenta definir una función escalar (usando CREATE FUNCTION) que te haga


el
cálculo y luego reutilizas la función en cada parte de tu sentencia SQL


que
la necesitas.

saludos
gux
Gustavo Larriera, MSFT MVP-SQL
Uruguay LatAm

This message is provided "AS IS" with no warranties expressed or implied,
and confers no rights.


"RICARDO URIBE" wrote in message
news:
> Por ejemplo tengo esta vista, en cual creo campos basandome en el


calculo
de
> uno o mas campos, pero se fijan que tengo que calcular para cada calculo
que
> nuevo que
> que quiero hacer , por ejemplo creo el campo Descuento, despues para


usar
> ese campo en otra operacion tengo que poner todo el calculo y la
operacion.
>
> SELECT dbo.OrdenCompraDetalles.SerieOrdenCompra,
> dbo.OrdenCompraDetalles.NumeroOrdenCompra,
> dbo.OrdenCompraDetalles.CodigoProducto,
> dbo.Productos.NombreProducto,


dbo.Productos.Unidad,
> dbo.OrdenCompraDetalles.Cantidad, dbo.OrdenCompraDetalles.Precio,
> dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio AS VentaBruta,


dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2,
> dbo.OrdenCompraDetalles.D3,
> dbo.OrdenCompraDetalles.D4,
> dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio, dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2,
> dbo.OrdenCompraDetalles.D3, dbo.OrdenCompraDetalles.D4) AS Descuento,
> dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio -
> dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio,
> dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
> dbo.OrdenCompraDetalles.D4) AS ValorVenta,
> (dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio -
> dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
> dbo.OrdenCompraDetalles.Precio,
> dbo.OrdenCompraDetalles.D1,
> dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
> dbo.OrdenCompraDetalles.D4)) * 0.19 AS IGV
> FROM dbo.OrdenCompraDetalles INNER JOIN
> dbo.Productos ON
> dbo.OrdenCompraDetalles.CodigoProducto = dbo.Productos.CodigoProducto
>
> Mi pregunta es, no hay una forma de usar ese campo que ya esta creado,


no
se
> tal vez mandarlo a una variable, porque esto pienso convertirlo en un
> Procedimiento Almacenado,
> para no tener que estar poniendo toda la operacion cada vez que necesito
ese
> dato.
>
> Gracias por su ayuda.
>
>
>
>
>
>
>


Respuesta Responder a este mensaje
#4 Gustavo Larriera [MVP]
28/12/2003 - 15:51 | Informe spam
Intenta definir una función escalar (usando CREATE FUNCTION) que te haga el
cálculo y luego reutilizas la función en cada parte de tu sentencia SQL que
la necesitas.

saludos
gux
Gustavo Larriera, MSFT MVP-SQL
Uruguay LatAm

This message is provided "AS IS" with no warranties expressed or implied,
and confers no rights.


"RICARDO URIBE" wrote in message
news:
Por ejemplo tengo esta vista, en cual creo campos basandome en el calculo


de
uno o mas campos, pero se fijan que tengo que calcular para cada calculo


que
nuevo que
que quiero hacer , por ejemplo creo el campo Descuento, despues para usar
ese campo en otra operacion tengo que poner todo el calculo y la


operacion.

SELECT dbo.OrdenCompraDetalles.SerieOrdenCompra,
dbo.OrdenCompraDetalles.NumeroOrdenCompra,
dbo.OrdenCompraDetalles.CodigoProducto,
dbo.Productos.NombreProducto, dbo.Productos.Unidad,
dbo.OrdenCompraDetalles.Cantidad, dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio AS VentaBruta, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4,
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3, dbo.OrdenCompraDetalles.D4) AS Descuento,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4) AS ValorVenta,
(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4)) * 0.19 AS IGV
FROM dbo.OrdenCompraDetalles INNER JOIN
dbo.Productos ON
dbo.OrdenCompraDetalles.CodigoProducto = dbo.Productos.CodigoProducto

Mi pregunta es, no hay una forma de usar ese campo que ya esta creado, no


se
tal vez mandarlo a una variable, porque esto pienso convertirlo en un
Procedimiento Almacenado,
para no tener que estar poniendo toda la operacion cada vez que necesito


ese
dato.

Gracias por su ayuda.







Respuesta Responder a este mensaje
#5 Miguel Egea
29/12/2003 - 14:35 | Informe spam
prueba crear esa vista como indexada, ganarás rendimiento, además el campo
calculado ya existirá como tal.
Los campos calculados pueden ser una solución para el programador, ya que le
ayudan a escribir menos, pero no son necesariamente buenos para SQL, las
udfs tienen o pueden tener incluso decrementos de rendimiento dependiendo de
lo que hagan dentro.
Si usas campos calculados en la propia definición de las tablas también
evitarás escribir, aunque la operación seguirá realizandose durante la
ejecución. Sin embargo puedes crear índices sobre campos calculados en cuyo
caso ya existen físicamente.

puedes revisar un artículo de Fernando Guerrero en portalsql.com sobre estos
campos.

Como ejemplo puedes usar esto

create table #t(id int, cantidad int, precio money, descuento float,
importe as Cantidad*Precio-Cantidad*precio*descuento )
go
insert into #t(id,cantidad,precio,descuento) values(1,1,100,.10)
insert into #t(id,cantidad,precio,descuento) values(1,15,100.52,.08)
go
select * from #t


Saludos
Miguel Egea
"RICARDO URIBE" escribió en el mensaje
news:
Por ejemplo tengo esta vista, en cual creo campos basandome en el calculo


de
uno o mas campos, pero se fijan que tengo que calcular para cada calculo


que
nuevo que
que quiero hacer , por ejemplo creo el campo Descuento, despues para usar
ese campo en otra operacion tengo que poner todo el calculo y la


operacion.

SELECT dbo.OrdenCompraDetalles.SerieOrdenCompra,
dbo.OrdenCompraDetalles.NumeroOrdenCompra,
dbo.OrdenCompraDetalles.CodigoProducto,
dbo.Productos.NombreProducto, dbo.Productos.Unidad,
dbo.OrdenCompraDetalles.Cantidad, dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio AS VentaBruta, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4,
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio, dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2,
dbo.OrdenCompraDetalles.D3, dbo.OrdenCompraDetalles.D4) AS Descuento,
dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4) AS ValorVenta,
(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio -
dbo.DescuentoT4(dbo.OrdenCompraDetalles.Cantidad *
dbo.OrdenCompraDetalles.Precio,
dbo.OrdenCompraDetalles.D1,
dbo.OrdenCompraDetalles.D2, dbo.OrdenCompraDetalles.D3,
dbo.OrdenCompraDetalles.D4)) * 0.19 AS IGV
FROM dbo.OrdenCompraDetalles INNER JOIN
dbo.Productos ON
dbo.OrdenCompraDetalles.CodigoProducto = dbo.Productos.CodigoProducto

Mi pregunta es, no hay una forma de usar ese campo que ya esta creado, no


se
tal vez mandarlo a una variable, porque esto pienso convertirlo en un
Procedimiento Almacenado,
para no tener que estar poniendo toda la operacion cada vez que necesito


ese
dato.

Gracias por su ayuda.







email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida