Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta larga, ejecucion larguisima

Estas en el tema de Consulta larga, ejecucion larguisima en el foro de SQL Server en Foros del Web. Tengo una consulta muy larga del tipo: Código: SELECT T001FechaHora AS FechaHora, T001Nombre AS Nombre, T001Apellido1 AS Apellido1, T001Apellido2 AS Apellido2, T001Edad AS Edad, T001DNI ...
  #1 (permalink)  
Antiguo 02/10/2006, 05:58
 
Fecha de Ingreso: mayo-2005
Mensajes: 36
Antigüedad: 19 años
Puntos: 0
Consulta larga, ejecucion larguisima

Tengo una consulta muy larga del tipo:

Código:
SELECT     T001FechaHora AS FechaHora, T001Nombre AS Nombre, T001Apellido1 AS Apellido1, T001Apellido2 AS Apellido2, T001Edad AS Edad, T001DNI AS DNI,
                       T001Sexo AS Sexo,
                          (SELECT     T.T002Nombre
                            FROM          T002Titulaciones T
                            WHERE      T.T002Titulacion = U.T002Titulacion) AS Titulación,
                          (SELECT     Cl.T003Nombre
                            FROM          T003Clases Cl
                            WHERE      Cl.T003Clase = U.T003Clase) AS Clase,
                          (SELECT     TC.T004Nombre
                            FROM          T004TiposCentro TC
                            WHERE      TC.T004TipoCentro = U.T004TipoCentro) AS TipoCentro,
                          (SELECT     G.T005Nombre
                            FROM          T005Grupos G
                            WHERE      G.T005Grupo = U.T005Grupo) AS Grupo,
                          (SELECT     Ca.T006Nombre
                            FROM          T006Categorias Ca
                            WHERE      Ca.T006Categoria = U.T006Categoria) AS Categoria,
                          (SELECT     R.T013Respuesta
                            FROM          T013Respuestas R
                            WHERE      R.T001Usuario = U.T001Usuario AND R.T012Orden = 1) AS Respuesta1,
                          (SELECT     R.T013Respuesta
                            FROM          T013Respuestas R
                            WHERE      R.T001Usuario = U.T001Usuario AND R.T012Orden = 2) AS Respuesta2,
                          (SELECT     R.T013Respuesta
                            FROM          T013Respuestas R
                            WHERE      R.T001Usuario = U.T001Usuario AND R.T012Orden = 3) AS Respuesta3,
                          (SELECT     R.T013Respuesta
                            FROM          T013Respuestas R
                            WHERE      R.T001Usuario = U.T001Usuario AND R.T012Orden = 4) AS Respuesta4,
                          (SELECT     R.T013Respuesta
                            FROM          T013Respuestas R
                            WHERE      R.T001Usuario = U.T001Usuario AND R.T012Orden = 5) AS Respuesta5,
................
................,
                          (SELECT     R.T013Respuesta
                            FROM          T013Respuestas R
                            WHERE      R.T001Usuario = U.T001Usuario AND R.T012Orden = 80) AS Respuesta80
FROM         dbo.T001Usuarios U
Y tarda muchisimo en ejecutarse. La he metido en un procedicimiento almacenado para ver si ganaba algo pero nada. ¿Alguien sabe como puedo agilizar esta consulta?

Gracias de antemano
  #2 (permalink)  
Antiguo 02/10/2006, 08:41
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
pues yo probaria cambiando las subconsultas de T013 por una sola agrupando por usuario... pe.


Código:
SELECT     Case T012Orden  when  1 Then T013Respuesta Else '' End AS Respuesta1
          ,Case T012Orden  when  2 Then T013Respuesta Else '' End AS Respuesta2 
          ,Case T012Orden  when  3 Then T013Respuesta Else '' End AS Respuesta3 
          ,Case T012Orden  when  ... Then T013Respuesta Else '' End AS Respuesta... 
          ,Case T012Orden  when  80 Then T013Respuesta Else '' End AS Respuesta80 
FROM        T013Respuestas (nolock) 
Group by    T001Usuario, T012Orden
y ya esa ligarla a la consulta por medio del usuario... seleccionando cada una de las respuestas...

tal vez eso ayude... aunque faltaria revisar los indices de cada tabla...

un saludo
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 03/10/2006, 00:33
 
Fecha de Ingreso: mayo-2005
Mensajes: 36
Antigüedad: 19 años
Puntos: 0
Muchas gracias Andres95. Ahora va algo mejor. No suelo usar el group by pero hay casos como este que le viene muy bien. Para que me de el resultado que yo quiero he tenido que construir esto:

Código:
SELECT T001Usuario, SUM(CASE T012Orden WHEN 1 THEN T013Respuesta ELSE 0 END) AS Respuesta1
, SUM(CASE T012Orden WHEN 2 THEN T013Respuesta ELSE 0 END) AS Respuesta2
, SUM(CASE T012Orden WHEN 3 THEN T013Respuesta ELSE 0 END) AS Respuesta3
, SUM(CASE T012Orden WHEN 4 THEN T013Respuesta ELSE 0 END) AS Respuesta4
...............
, SUM(CASE T012Orden WHEN 80 THEN T013Respuesta ELSE 0 END) AS Respuesta80
FROM T013Respuestas
GROUP BY T001Usuario
Los indices coinciden con los campos claves, que son por los que estoy buscando.

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:37.