Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/04/2012, 16:46
Avatar de jhodmar
jhodmar
 
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Reducir Tiempos en Consulta SQL

bueno mi equipo en el cual corro la aplicacion es
SO Win7 Ultimate 32 bits
cpu intel core i3 2,40 GB
memoria ram 4 GB
VB 2010
SQLServer 2008

realizo consultas de Zonas
Cita:
ELSE IF (@Opcion = 2)
SET @sql =
'--Definimos nuestro CTE
WITH Zonas(IdNode, Descripcion,Level, IdPadre)
AS
(
-- Definimos la raíz o miembro anclar
SELECT Id, descripcion , 1 as Level, IdPadre
FROM TBL_VYD_Regiones
WHERE Id = '''+@IdRegionActual+'''
UNION ALL
-- Definimos el miembro recursivo haciendo referencia a nuestro CTE
SELECT n.Id, n.Descripcion , ZR.Level + 1 as Level, n.IdPadre
FROM TBL_VYD_Regiones n
INNER JOIN Zonas ZR on n.IdPadre = ZR.IdNode
)
-- Ahora simplemente consultamos nuestro CTE
SELECT * from Zonas
Order by Level'
fue necesario hacer llamada recursiva pero desde el mismo SQL

luego recorro los resultados
Cita:
IF (@opcion = 1)
SET @sql =
'SELECT SUM(T1.CantidadesTotales) as CantidadTotal
FROM (SELECT (TBL_INV_RemFact_Pedidos.Cantidad) AS CantidadesTotales
FROM TBL_INV_RemFact_Pedidos
INNER JOIN TBL_VYD_DetallesP ON TBL_INV_RemFact_Pedidos.NroPedido = TBL_VYD_DetallesP.NroPedido
INNER JOIN TBL_INV_REMFACT ON TBL_INV_RemFact_Pedidos.IdRF = TBL_INV_REMFACT.idRF
RIGHT OUTER JOIN TBL_VYD_Regiones ON TBL_VYD_DetallesP.id_zona = TBL_VYD_Regiones.id
GROUP BY TBL_VYD_Regiones.id, TBL_INV_RemFact_Pedidos.EstadoFact,
TBL_INV_REMFACT.fechaImpF, TBL_INV_RemFact_Pedidos.Cantidad
HAVING (TBL_VYD_Regiones.id ='''+@IdRegionActual+''')
AND (TBL_INV_REMFACT.fechaImpF
BETWEEN '''+@FechaInicial+''' AND CONVERT(varchar(12), DATEADD(day, 0, GETDATE()), 106))
AND (TBL_INV_RemFact_Pedidos.EstadoFact = ''F'')) as T1'
......
luego lleno mi datagridview
despues de esto me ubico en la primera zona y
ahora realizo clasificacion por productos
que es un segundo grid que tambien va a consultar la BD
primero los grupos
Cita:
ELSE IF (@Opcion = 5)
SET @sql =
'DECLARE @Cadena VARCHAR(1024)
--Definimos nuestro CTE
WITH Items(idNodo, Nombre,Level, IdPadre)
AS
(
-- Definimos la raíz o miembro anclar
SELECT idNodo , Nombre , 1 as Level, IdPadre
FROM TBL_INV_ARBOL
WHERE idNodo = '''+@IdItemsActual+'''
UNION ALL
-- Definimos el miembro recursivo haciendo referencia a nuestro CTE
SELECT AR.idNodo , AR.Nombre , ZR.Level + 1 as Level, AR.IdPadre
FROM TBL_INV_ARBOL AR
INNER JOIN Items ZR on ZR .IdPadre = AR .idNodo-- order by ZR.Level desc
)
--Creamos funcion que nos permita concatenar los nombres!
select @Cadena = Nombre + COALESCE('' - '' + @Cadena,'''')
FROM Items where IdPadre <> ''0''
SELECT Items = @Cadena '
luego de eso por cada grupo de items busco total unidades
dependiendo de la region de la primeras consultas!
Cita:
ELSE IF (@Opcion = 4)
SET @sql =
'select dbo.TBL_INV_ITEM.idNodo, dbo.TBL_INV_RemFact_Pedidos.Referencia,
dbo.TBL_INV_RemFact_Pedidos.Descripcion,
SUM(dbo.TBL_INV_RemFact_Pedidos.Cantidad) AS TotalCantidad
from TBL_INV_RemFact_Pedidos
INNER JOIN TBL_VYD_DetallesP ON TBL_INV_RemFact_Pedidos.NroPedido = TBL_VYD_DetallesP.NroPedido
INNER JOIN TBL_INV_ITEM ON TBL_INV_RemFact_Pedidos.Referencia = TBL_INV_ITEM.Referencia
INNER JOIN TBL_INV_REMFACT ON dbo.TBL_INV_RemFact_Pedidos.IdRF = dbo.TBL_INV_REMFACT.idRF
where (TBL_VYD_DetallesP.id_zona = '''+@IdRegionActual+''')
AND (TBL_INV_REMFACT.fechaImpF
BETWEEN '''+@FechaInicial+''' AND CONVERT(varchar(12), DATEADD(day, 0, GETDATE())))
GROUP BY TBL_INV_RemFact_Pedidos.Referencia,
TBL_INV_RemFact_Pedidos.Descripcion, TBL_INV_ITEM.idNodo,
TBL_INV_ITEM.idTipo HAVING (TBL_INV_ITEM.idNodo = '''+@IdItemsActual+''')
AND (dbo.TBL_INV_ITEM.idTipo = ''7'')'
bueno creo que esa son algunas de las cosas que hago para mostrar los registros
despues de eso debo obtener porcentajes por region por producto y porcentaje total
....

Resumen:
busco todas las zonas hijas
recorro zona por zona
sumo los productos que se vendieron en la zonas hijas y la coloco en la zona padre
luego me ubico en una zona padre y busco que productos se vendieron en sus zonas hijos
ahora sumo todos los productos de las zonas hijas
luego de esto por regla de 3 obtengo lso porcentajes individuales de cada zona padre y cada producto
....
bueno creo que eso deberia confundirte mas!!
pero cualquier sugerencia que me reduzca el tiempo la mitad te lo agradeceria enormemente!!!