SQL Server - Sobre consulta

 
Vista:

Sobre consulta

Publicado por yessenia (4 intervenciones) el 25/11/2008 05:05:02
*Tengo la siguiente consulta en un procedimiento almacenado: */



if @preg='p1'
begin

set @dpt=1

while @dpt<15
begin
set @texto= (select distinct dpt_departamento from mti_ubi_dpt where dpt_codigo=@dpt)
SET @tipo1 = (select count(a.tipo) from tipos a
inner join mti_ubi_cir b on a.codigo=b.codigo
inner join mti_ubi_cir b on a.cir_codigo=b.cir_codigo
inner JOIN mti_ubi_mcp d on c.mcp_codigo=d.mcp_codigo
inner JOIN mti_ubi_dpt e on d.dpt_codigo=e.dpt_codigo
where e.dpt_codigo=@dpt and a.tipo =1)
SET @luz = (select count(a.tipo) from tipos a
inner join mti_ubi_cir b on a.cir_codigo=b.cir_codigo
inner JOIN mti_ubi_cmn c on b.cmn_codigo=c.cmn_codigo
inner JOIN mti_ubi_mcp d on c.mcp_codigo=d.mcp_codigo
inner JOIN mti_ubi_dpt e on d.dpt_codigo=e.dpt_codigo
where e.dpt_codigo=@dpt and a.tipo =1)
SET @sani = (select count(a.tipo) from tipos a
inner join mti_ubi_cir b on a.cir_codigo=b.cir_codigo
inner JOIN mti_ubi_cmn c on b.cmn_codigo=c.cmn_codigo
inner JOIN mti_ubi_mcp d on c.mcp_codigo=d.mcp_codigo
inner JOIN mti_ubi_dpt e on d.dpt_codigo=e.dpt_codigo
where e.dpt_codigo=@dpt and a.tipo =1)
set @porcent =(@tipo1*0.2+@tipo2*0.2+@tipo3*0.1)*100
SELECT @texto as Departamento, @tipo1 as tipo1,@tipo2 as tipo2,@tipo3 as tipo3,
@porcent as Porcentaje
set @dpt=@dpt+1
if @dpt=15
break
else
continue
end

end
else



/* Cuando lo ejecuto me genera el siguiente resultado: */
Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto1 10 13 13 39.33
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto2 12 12 13 40.67
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto3 12 13 12 44.29
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto4 9 14 12 38.67
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto5 9 9 9 50.00
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto6 13 14 14 40.00
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto7 13 14 15 46.00
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto8 8 11 13 39.23
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto9 12 14 15 41.88
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto10 13 14 14 40.00
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto11 12 13 12 44.29
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto12 10 13 13 39.33
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto13 9 14 12 38.67
(1 filas afectadas)

Departamento Tipo1 Tipo2 Tipo3 Porcentaje
-------------------- ------------------ ------------------- ---------------- ------------------------------
Depto14 13 14 14 40.00
(1 filas afectadas)

/*Cuando en realidad necesito tener este resultado*/
Departamento Tipo1 Tipo2 Tipo3 Porcentaje
--------------------- ------------------ ----------------- ------------------ ------------------------------
Depto1 10 13 13 39.33
Depto2 12 12 13 40.67
Depto3 12 13 12 44.29
Depto4 9 14 12 38.67
Depto5 9 9 9 50.00
Depto6 13 14 14 40.00
Depto7 13 14 15 46.00
Depto8 8 11 13 39.23
Depto9 12 14 15 41.88
Depto10 13 14 14 40.00
Depto11 12 13 12 44.29
Depto12 10 13 13 39.33
Depto13 9 14 12 38.67
Depto14 13 14 14 40.00
(14 filas afectadas)



/* Por favor ayudenme, necesito saber que es lo que estoy haciendo mal*/
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

RE:Sobre consulta

Publicado por Isaias (3308 intervenciones) el 25/11/2008 18:06:49
Por principio de cuentas, las asignaciones de valores (SET) a una variable no se codififican como tu las tienes, debe ser asi.

SELECT @MyVariable = MyColumna FROM MyTabla WHERE .........

Segundo, por cada SELECT que haces al final de tu WHILE, se presenta una linea en tu pantalla de Query, si deseas que se presenten TODAS los registros al final de tu proceso, insertalos en una tabla temporal y al final, al salir del while, simplemente le haces un select a tu tabla de paso.
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:Sobre consulta

Publicado por yessenia (4 intervenciones) el 26/11/2008 04:29:33
Gracias por responder, tomare en cuenta tus comentarios
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:Duda sobre tablas temporales

Publicado por yessenia (4 intervenciones) el 27/11/2008 04:38:10
Quisiera saber que tan recomendable es usar una variable de tipo tabla en vez de una tabla temporal, ya que he leido que no es muy recomendable usar tablas temporales(virtuales) porque ocupa muchos recursos del servidor o de la máquina local.......
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:Duda sobre tablas temporales

Publicado por pacopaz (131 intervenciones) el 27/11/2008 23:15:20
Las variables tipo Table son tablas implementadas en memoria RAM en el servidor de base de datos, mientras que el las tablas temporales (que siguen siendo más utilizadas por que todo mundo está familiarizado con su uso) se implementan en el disco duro del servidor y luego para acceder a ellas, hay que hacer uso de memoria. De ahí que ocupen más recursos. Esto, sin dejar de mencionar que si no las borras, permanecen en la base de datos, mientras que las variables se destruyen cuando sales del sp o function donde las creaste.

Espero que te sirva.

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:Duda sobre tablas temporales

Publicado por Isaias (3308 intervenciones) el 28/11/2008 06:14:49
Pacopaz

"Esto, sin dejar de mencionar que si no las borras, permanecen en la base de datos"

Esto NO ES DEL TODO CIERTO.

Las tablas temporales (que se crean con un singo # o ##), se BORRAN DE FORMA AUTOMATICA cuando la conexion que las creo, es cerrada (deconectada).

Por otro lado, las tablas tipo VARIABLE, son recomendables solo si, son pocos los registros que van a contener.

Imaginate una tabla tipo variable con 3 millones de registros, ¿Habra suficiente memoria para soportar dichos registros?
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