Realizar varias acciones sobre una consulta

12/02/2004 - 12:28 por Mario Barro | Informe spam
Hola a todos;

Os espongo mi duda;

Cómo es posible en un procedimiento almacenado con parámetros de
entrada(filtros) y de salida(Output) y partir de una determinada consulta
entre fechas calcular y devolver las siguientes cuestiones de forma óptima.

1) Devolver todos los registros con sus campos correspondientes a partir de
un "select .".
2) Calcular funciones de agregación sobre dicha consulta, es decir, calcular
SUM(campo), MIN(campo), etc
3) Calcular otros valores totalizadores sobre dichos datos, pero que ademas
añaden algún filtro más a la consulta.

Es decir, la idea es realizar todos desde un procedimiento almacenado y que
devuelva las filas y los valores totalizadores calculados en parámetros de
entrada.
Todo ello sin tener que ejecutar cada vez la consulta para calcularlos.

Gracias y saludos

Preguntas similare

Leer las respuestas

#6 Mario Barro
13/02/2004 - 18:07 | Informe spam
Interesante el uso de COMPUTE
Gracias por tu ayuda



"Javier Loria" escribió en el mensaje
news:
Hola Mario:
No creo que exista lo que quieres exactamente.
Puedes usar COMPUTE que devuelde los datos en conjuntos de datos
separarados y no como parametros:
> SELECT OrderID, ProductID, UnitPrice, Quantity, Discount,
UnitPrice*Quantity*(1-Discount) AS Total
FROM [Order Details]
WHERE ProductID
COMPUTE MIN(UnitPrice), MAX(UnitPrice),


SUM(UnitPrice*Quantity*(1-Discount))
>
La unica forma de "reutilizar" los datos del primer select es


grabarlos
en una tabla temporal o en una variable tipo tabla. Y a menos que la
consulta se vaya a utilizar muchas veces en el mismo procedimiento y que


sea
muy lenta, no te lo recomiendo esta tecnica.

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Mario Barro escribio:
> Gracias por tu ayuda
> Lo que comentas es la idea que necesito, pero aún voy a ir más fino.
>
> Supongamos que la sentencia Select es costosa de realizar porque la
> tabla tiene muchos registros.
>
> Y el caso es que los valores (SUM, MIN, etc) son realizados también
> sobre esa misma consulta inicial y con los mismos filtros.
>
> Mi pregunta es, si se tiene que volver a realizar la consulta por
> cada valor de agregación que necesitásemos calcular, es decir, poder
> reutilizar los datos devueltos del primer "select" para luego
> realizar las posteriores consultas sobre ellos en concreto y no sobre
> la bbdd otra vez.
>
> Es decir algo como
>
> MisDatosDevueltos = Select .from MiTabla where
> ..Misfiltros
>
> select @Total = SUM (Precio) from MisDatosDevueltos
>
> Y no tener que hacer:
> select @Total = SUM(Precio) from MiTabla Where .. MisFiltros
>
> Donde MisFiltros son iguales en los dos casos.
>
> Espero se entienda lo expresado.
>
> Saludos


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