SQL Server - CONSULTA SQL SERVER 2005

   
Vista:

CONSULTA SQL SERVER 2005

Publicado por DAVID (7 intervenciones) el 22/07/2010 15:28:57
HOLA MUY BUENAS, ANTES DE NADA MUCHAS GRACIAS A LOS QUE LE DEDIQUEN ESOS MINUTOS A LA LECTURA DE MI DUDA.

TENGO UNA CONSULTA, QUE LOS VALORES QUE IMPRIME , ALGUNOS DE ELLOS NO SON COHERENTES. LA CONSULTA ES LA SIGUIENTE:
-----------------
SELECT ISNULL(U.NOMBRE, 'Sin Gestor') AS VALOR,
(SELECT COUNT(*) AS Expr1
FROM tbPEDIDOS AS P1
WHERE (ESTADO = 1) AND (GESTOR = P.GESTOR)) AS ESTADO1,
(SELECT COUNT(*) AS Expr1
FROM tbPEDIDOS AS P1
WHERE (ESTADO = 2) AND (GESTOR = P.GESTOR)) AS ESTADO2,
(SELECT COUNT(*) AS Expr1
FROM tbPEDIDOS AS P1
WHERE (ESTADO = 3) AND (GESTOR = P.GESTOR)) AS ESTADO3, COUNT(*) AS TOTAL
FROM tbPEDIDOS AS P LEFT OUTER JOIN
tbUSUARIOS AS U ON P.GESTOR = U.ID
WHERE (1 = 1)
GROUP BY U.NOMBRE, P.GESTOR
ORDER BY U.NOMBRE
------------------
VALOR ESTADO1 ESTADO2 ESTADO3 TOTAL
Sin Gestor 0 0 0 57
Administrador 0 16 0 16
Anna Barcons 0 9 4 13
Ignasi Brufau 1 6 2 9
Nuria Borraz 0 1 2 3
Reyes Catalan 0 0 1 1
Silvia Aparicio 0 0 2 2
-------------------

COMO PODEIS VER LA PRIMERA LINEA, "SIN GESTOR", 0+0+0=57, ES INCORRECTO, PERO NO VEO EL PROBLEMA. SI ME PODEIS ECHAR UN CABLE LO AGRADECERÉ ENORMEMENTE. 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 Isaias

RE:CONSULTA SQL SERVER 2005

Publicado por Isaias (3181 intervenciones) el 22/07/2010 18:02:06
Dime si este codigo sin SUB-SELECTS te funciona:

SELECT ISNULL(U.NOMBRE, 'Sin Gestor') AS VALOR,
SUM(CASE WHEN ESTADO = 1 THEN 1 ELSE 0 END) AS ESTADO1,
SUM(CASE WHEN ESTADO = 2 THEN 1 ELSE 0 END) AS ESTADO2,
SUM(CASE WHEN ESTADO = 3 THEN 1 ELSE 0 END) AS ESTADO3,
COUNT(*) AS TOTAL
/*
(SELECT COUNT(*) AS Expr1 FROM tbPEDIDOS AS P1 WHERE (ESTADO = 1) AND (GESTOR = P.GESTOR)) AS ESTADO1,
(SELECT COUNT(*) AS Expr1 FROM tbPEDIDOS AS P1 WHERE (ESTADO = 2) AND (GESTOR = P.GESTOR)) AS ESTADO2,
(SELECT COUNT(*) AS Expr1 FROM tbPEDIDOS AS P1 WHERE (ESTADO = 3) AND (GESTOR = P.GESTOR)) AS ESTADO3,
*/
FROM tbPEDIDOS AS P LEFT OUTER JOIN
tbUSUARIOS AS U ON P.GESTOR = U.ID
GROUP BY ISNULL(U.NOMBRE, 'Sin Gestor')
ORDER BY ISNULL(U.NOMBRE, 'Sin Gestor')
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:CONSULTA SQL SERVER 2005

Publicado por DAVID (7 intervenciones) el 22/07/2010 18:22:31
GRACIAS ISAIAS! M FUNCIONA PERFECTAMENTE!! ERES UN CRACK, AHORA ANALIZARÉ TODO LO QUE HAS HECHO, PQ SOY UN POCO NOVATILLO Y ME TENDRÉ DE TOMAR MI TIEMPO JEJE

1000GRACIAS!
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:CONSULTA SQL SERVER 2005

Publicado por david (7 intervenciones) el 22/07/2010 19:59:43
ISAIAS, esta parte---> "CASE WHEN ESTADO = 1 THEN 1 ELSE 0 END"

¿exactamente que haces aqui? lo que me mata es "THEN 1 ELSE 0 END"

:P

gracias!
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:CONSULTA SQL SERVER 2005

Publicado por Leonardo Josue (79 intervenciones) el 22/07/2010 22:24:30
Buenas Tardes David, no soy Isaías, pero me tomé la libertad de contestarte.

Lo que hace esta instrucción CASE WHEN ESTADO = 1 THEN 1 ELSE 0 END es clasificar aquellos registros con el valor estado = 1 para contabilizarlos, a ver si con un ejemplo me explico mejor. Supongamos que tienes la siguiente tabla.

ID|ESTADO
a|1
b|2
c|3
d|2
e|1
f|3
g|2
h|3
i|3

Lo que se hace la consulta es ir "clasificando" cada uno de los registros de acuerdo a si estado, de tal manera que si no tuvieras la SUM tendrías algo como esto:

ID|ESTADO1|ESTADO2|ESTADO3
a|1|0|0
b|0|1|0
c|0|0|1
d|0|1|0
e|1|0|0
f|0|0|1
g|0|1|0
h|0|0|1
i|0|0|1

Si observas, los registros a y e tienen un 1 en la columna ESTADO1, los registros b,d y g tienen un 1 en la columna ESTADO2, y los restantes tienen un 1 en la columna ESTADO3. Finalmente con la suma contabilizas cada una de estas columnas para que te de el total. Espero haberme explicado y si no, pues dejaré que Isaías responda.

Saludos.
Leo.
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 Isaias

RE:CONSULTA SQL SERVER 2005

Publicado por Isaias (3181 intervenciones) el 23/07/2010 01:58:55
Muchas gracias por la ayuda
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:CONSULTA SQL SERVER 2005

Publicado por Juanma Cruz (59 intervenciones) el 26/07/2010 10:46:58
¿Has considerado que algún registro tenga un estado no contenido entre 1 al 3 ? Bien por defecto en el diseño de la tabla o la introducción de datos.

Esos registros que fallan en el Join me hacen pensar en nulos que tú mismo reeemplazas por 'Sin gestor'.

Si estás seguro al 100% que los únicos estados posibles son del 1 al 3, nada, ya Isaías te ha dado la solución, para qué sugerir otra cosa.

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:CONSULTA SQL SERVER 2005

Publicado por Leonardo Josue (79 intervenciones) el 26/07/2010 15:57:23
Buenos Días Juanma:

Sólo para comentarte que nadie le sugirió otra cosa a David, de hecho en su siguiente comentario indica que la solución que dió Isaías le resulto perfectamente. Los comentarios adicionales fueron para tratar de explicarle a David el funcionamiento del query que dejó Isaías.

Saludos
Leo.
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