SQL Server - ayuda procedure

 
Vista:

ayuda procedure

Publicado por alejandro (17 intervenciones) el 23/12/2009 21:52:41
select tipooperacion, producto, tipotasa, plazocuotas, tramocupo,

min(tasa) as min,

max(tasa) as max,

sum(montotrx*tasa)/count(*) as tasa_promedio,

sum(montotrx) as montotrx

from tbld33

where idsbif = 12

group by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

order by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

--------------------------------------------------------

mediante un procedimiento necesito implementar esta query

el problema es que el 12 que puse va variando (se saka de otra tabla )
como puedo generar eso automaticamente ?¿
por ej ejecuto un select distinc sobre la tabla y me retorna 4 registros (q es donde van el 12 )

como puedo almacenar eso en un arreglo y recorrerlo
o algo asi
saludos
y gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de roger

RE:ayuda procedure

Publicado por roger (173 intervenciones) el 23/12/2009 22:53:28
select tipooperacion, producto, tipotasa, plazocuotas, tramocupo,

min(tasa) as min,

max(tasa) as max,

sum(montotrx*tasa)/count(*) as tasa_promedio,

sum(montotrx) as montotrx

from tbld33

where idsbif IN(select distinct campo from laTabla4Datos)

group by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

order by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda procedure

Publicado por alejandro (17 intervenciones) el 23/12/2009 23:00:26
amigo
ese campo es variable

y la consulta esa retorna al menos 4 registros

necesito hacer la consulta para cada registro

gracias

vale por la respuesta de todas maneras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de roger

RE:ayuda procedure

Publicado por roger (173 intervenciones) el 23/12/2009 23:30:52
disculpa, pero no entiendo. Dices : "el problema es que el 12 que puse va variando". Por eso puse en la consulta que comparara el campo contra el resultado del select. Pero ahora veo que lo que es variable es el campo, entonces no se bien lo que necesitas, si me puedes dar mas detalles. Pues de entrada te digo que arreglos no se manejan en SQL server, pero digamos que se podrian usar cursores en el peor de los casos, y si no hay otra solucion a lo que quieres hacer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda procedure

Publicado por alejandro (17 intervenciones) el 23/12/2009 23:39:52
estimado
el 12 es solo un ej

necesito ejecutar el select por cada registro devuelto por :
(select distinct campo from laTabla4Datos)

si t da como resultado ej:
12
14
15

tengo que ejecutar 3 veces el select(para despues futuramente hacer un insert)

nose como pasarle
como parametro esos numeros me entiendes?¿
y que automaticamente se ejecute 3 veces con cada unom de esos campos
nose si me explico bien men

-------------
min(tasa) as min,

max(tasa) as max,

sum(montotrx*tasa)/count(*) as tasa_promedio,

sum(montotrx) as montotrx

from tbld33

where idsbif =12

group by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

order by tipooperacion, producto, tipotasa, plazocuotas, tramocupo
--------------------------------------------
min(tasa) as min,

max(tasa) as max,

sum(montotrx*tasa)/count(*) as tasa_promedio,

sum(montotrx) as montotrx

from tbld33

where idsbif =13

group by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

order by tipooperacion, producto, tipotasa, plazocuotas, tramocupo
--------------------------

y asi me entiendes solo cambiando ese campo
@numero etc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de roger

RE:ayuda procedure

Publicado por roger (173 intervenciones) el 24/12/2009 02:13:38
o sea que seria un procedimiento que recibiria los numeros como parametro
Algo asi:

Create procedure procedimiento @numeros varchar(100)
AS
SELECT
min(tasa) as min,
max(tasa) as max,
sum(montotrx*tasa)/count(*) as tasa_promedio,
sum(montotrx) as montotrx
from tbld33
where idsbif =@numeros
group by tipooperacion, producto, tipotasa, plazocuotas, tramocupo
order by tipooperacion, producto, tipotasa, plazocuotas, tramocupo

Y lo que quieres es que @numeros contenga los valores que quieres que se traigan en el select???, porque no necesariamente van a ser todos los 4 registros que hay en aquella otra tabla, cierto???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda procedure

Publicado por alejandro (17 intervenciones) el 24/12/2009 15:01:20
mira amigo lo solucione con un cursor
el problema es que el primer registro no me lo toma
estoy pegado en eso en esto momentos
te adjunto .

......................................
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

alter PROCEDURE [dbo].[InsertintblsbifD33]
AS
BEGIN
declare

declare recorre cursor for (select distinct (idsuper) from tbld33)
open recorre
fetch next from recorre

while @@fetch_status = 0
BEGIN
@into archivo
truncate table dbo.tblsbifD33

fetch next from recorre
END
close recorre
deallocate recorre
end
.........................................................

en @archivo guardo el registro eh imprimo

Saludos y feliz navidad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda procedure

Publicado por Carlos (2 intervenciones) el 26/01/2010 18:31:07
Que tal Alejandro, tal vez sea un poco tarde para que implementes la solución al problema que tenias pero tal ves para futuras ocasiones pueda servirte.
Antes que nada, lo más recomndable es evitar al máximo el uso de los cursores ya que estos consumen demasiados recursos del procesador.
La idea para solventar esto se me ocurre pude ser "simulando" un cursor, mediante el uso de una variable tipo tabla. En esta se almacenarian los valores que quieres tomar para despues filtrar (en el ejemplo que comentas el 12, 14, etc). Posteriormente habria que recorrer esta variable tipo tabla mediante un while y vas tomando cada uno de los registros y lo almacenas a una variable que sería lo que pasarías como parámetro al otro query. Finalmente lo que en lo personal hago es ir eliminando los registros de la variable para no tomarlos nuevamente en lo futuro.
Creo que así platicado suena muy complicado pero aquí te pongo un poqueño código de ejemplo esperando sea más claro.

/*Nota en la declaración de la variable tipo tabla, es como si crearas una tabla física en la que se almacenarán los resultados que necesitas de la primer consulta, así que deberas incluir los campos y tipos de datos de acuerdo a tus necesidades.*/
declare @iContador int --Servirá para saber hasta cuando realizar iteraciones
,@cTabla varchar(100)--Se utiliza para recuperar el registro que necesitamos
,@iRegistros int--Contendrá el número total de registros recuperados

declare @tVarTabla table(campo1 varchar(100))--Se declara la variable tipo tabla

--Con esto se almacenarán los valores en la variable tipo tabla
insert into @tVarTabla
select distinct (name) from sysobjects --Habría que cambiarlo por tu consulta

set @iRegistros = @@rowcount--Almacenamos el número de registros afectados por la instrucción anterior

set @iContador = 0--Inicializamos nuestro contador

while @iContador < @iRegistros--El ciclo se repetirá mientas el contador sea menor que el número total de registros
begin

--Obtenemos el primer registro y se almacena en una variable para poder utilizarlo posteriormente
select top 1 @cTabla = campo1
from @tVarTabla

print @cTabla--Se imprime el registro obtenido (igual podría pasarse como parámetro a un query para filtrar

set @iContador = @iContador + 1--Incrementamos el contador

--Nota esta parte es muy importante, eliminamos el registro que acabamos de utilizar de la variable tipo tabla.
--La finalidad de esto que que en el select que usamos entrando al ciclo se utiliza la instrucción TOP por lo que siempre obtendremos
--el primer registro, si no lo borramos siempre será el mismo
delete from @tVarTabla
where campo1 = @cTabla
end

Posiblemente haya fragmentos de código que puedan ser optimizados, pero bueno por lo menos de inicio, esto funciona muy bien.

Espero que este pequeño comentario sea de utilidad (como lo comenté para desarrollos actuales o futuros).

"Nada grande se ha hecho en este mundo sin una gran pasión."
Hegel

Saludos desde México
Carlos Gómez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar