Hola.
Espero me puedan ayudar con lo siguiente
Tengo la siguiente las siguientes tablas.
Inv_ItemStock
iItemStockId Int, nCantidad numeric, iIdItem Int, iIdAppDpto Int
Inv_ItemPvt
iIdItemStock Int, iIdTipPrecio Int, yValor Money
Inv_VtaTipPrice
iTipPrecioId Int, cDescripcion Varchar
Inv_PromocionC
iPromocionCId Int, tIni datetime, tFin datetime, iActivo Int
Inv_PromocionD
iPromocionDId Int, iIdPromocionC Int, iIdItemStock Int, iIdTipPrecio
Int, nPorcentaje Numeric , iCantidad Int, yValor Money
Defino la siguiente vista que de retorna los precios de venta mas el
valor del precio promocional si la promocion estubiera activa, dentro
del rango de fechas.
SELECT dbo.Inv_ItemPvt.iPVtaId, dbo.Inv_ItemPvt.iIdItemStock,
dbo.Inv_ItemPvt.iIdTipPrecio, dbo.Inv_VtaTipPrice.cDescripcion AS
cVtaTip,
dbo.Inv_ItemPvt.yValor, ISNULL(t.yValor, 0) AS
yValorP, CAST(0 AS Money) AS yPvtShow
FROM dbo.Inv_ItemPvt INNER JOIN
dbo.Inv_ItemStock ON
dbo.Inv_ItemStock.iItemStockId = dbo.Inv_ItemPvt.iIdItemStock INNER
JOIN
dbo.Inv_VtaTipPrice ON
dbo.Inv_ItemPvt.iIdTipPrecio = dbo.Inv_VtaTipPrice.iTipPrecioId LEFT
OUTER JOIN
(SELECT Inv_PromocionD.iIdItemStock,
Inv_PromocionD.iIdTipPrecio, Inv_PromocionD.yValor
FROM Inv_PromocionD INNER JOIN
Inv_PromocionC ON
Inv_PromocionC.iPromocionCId = Inv_PromocionD.iIdPromocionC
WHERE GetDate() BETWEEN
Inv_PromocionC.tIni AND Inv_PromocionC.tFin AND Inv_PromocionC.iActivo
= 1) t ON
dbo.Inv_ItemPvt.iIdItemStock = t.iIdItemStock
AND dbo.Inv_ItemPvt.iIdTipPrecio = t.iIdTipPrecio
Preguntas.
1.- Es optimo tener este tipo de vista que incluye GetDate().
Teniendo en cuenta que la tablas tendran registros
- Inv_ItemStock 10000 +-
- Inv_ItemPvt 30000 +-
- Inv_VtaTipPrice 10 +-
- Inv_PromocionC depende de numero de promociones que no seran
mas de 30 al año.
- Inv_PromocionD No registros de Inv_PromocionC x items en
promocion.
El nivel de consulta a la vista no es alto por el momento ya que
solamante tendran un 5 PC consultando la vista, de las cuales 2 son
puntos de venta no muy recurrentes.
2.- Como puedo cambiar esta parte del Select:
CAST(0 AS Money) AS yPvtShow
por algo como esto.
IIf(yValorP > 0, yValorP, yValor) As yPvtShow
3.- Es factible indexar esta vista, teniendo en cuenta que al hacerlo
esta el conjunto de resultados se almacena en la base de datos de la
misma forma que se almacena una tabla con un índice agrupado?
Espero no haber sido muy extenso.
Trabajo con Sql Server 2000 Sp 4
Saludos cordiales,
Mauricio Pulla
Cuenca-Ecuador
Leer las respuestas