SQL - Problema en Query (Ayudaaaa)

 
Vista:

Problema en Query (Ayudaaaa)

Publicado por Jose Quintana (6 intervenciones) el 17/08/2011 17:39:24
Buenos dias tengo un error en la sintaxis que no localizo espero si no es mucha molestia me puedan ayudar.


tengo este query y me arroja el siguiente resultado:


"SELECT CODEST, COUNT(*) FROM NOMPES WHERE CIA ='D01' AND TIPONOMINA = 'E' GROUP BY CODEST"
1 81
2 17
4 18
6 7


Ahora realizo este otro query para realizar otra busqueda:


SELECT CODIGO, NOMBRE FROM NOMEST WHERE CIA ='D01' AND TIPONOMINA = 'E'
1 Activo
2 Vacaciones
3 Contratado
4 Cesante
5 En Prueba
6 De Reposo
7 Permiso


yo quiero remplazar que donde dice 1 ahora diga activo; donde dice 2 vacaciones etc... y realizo este query:


SELECT A.NOMBRE, COUNT(B.CODEST)
FROM (NOMEST A, NOMPES B)
WHERE (B.CODEST = A.CODIGO) AND B.TIPONOMINA = 'E' AND B.CIA = 'D01'
ORDER BY B.CODEST


pero me arroja este error:


Msg 102, Level 15, State 1, Line 2
Sintaxis incorrecta cerca de ','.
sinceramente no se cual es el problema e intentado varias cosas y no logro solucionarlo si me podrian ayudar....

gracias de antemano
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

Problema en Query (Ayudaaaa)

Publicado por jams (16 intervenciones) el 18/08/2011 18:04:13
tienes 2 errores

1.- los parentesis en el from no son necesarios



2.-en lugar del order by debe ser group by por una columna que tengas en tu lista de campos delselect



prueba esto

SELECT A.NOMBRE, COUNT(B.CODEST)
FROM NOMEST A, NOMPES B
WHERE (B.CODEST = A.CODIGO) AND B.TIPONOMINA = 'E' AND B.CIA = 'D01'
group BY a.nombre

saludos y suerte
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema en Query (Ayudaaaa)

Publicado por leonardo_josue (1173 intervenciones) el 18/08/2011 18:11:30
Hola Jose Quintana:

Tienes varios detalles en tu consulta, creo que estás utilizando SQL Server, si no es así me corriges.

En primer lugar, cuando tengas necesidad de utilizar más de una tabla en una consulta UTILIZA JOIN (inner, left o rigth según se el caso), es decir, en lugar de hacer esto:

1
FROM Tabla1 T1, Tabla2 T2 WHERE T1.campo = T2.campo


Hazlo de esta manera

1
FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.campo = T2.campo


Si tienes problemas para entender cómo funciona cada tipo de JOIN busca ayuda en http://es.wikipedia.org/wiki/Join

Segundo, siempre que en tu select utilices algún campo de agrupación (COUNT, AVG, MIN, MAX, etc.) junto con algún otro campo, DEBES HACER USO DE LA CLÁUSULA GROUP BY. En tu caso por ejemplo estás utilizando el campo A.NOMBRE junto con un COUNT(B.CODEST), por lo tanto el campo A.NOMBRE debe incluirse en la cláusula GROUP BY, podrías dejar el count(*) pero si dejas el COUNT(B.CODEST) tambipen deberás incluir el campo B.CODEST en el GROUP BY.

Tercero, en tus tablas A y B estás manejando también los campos CIA y TIPONOMINA, por lo tanto la unión entre tus tablas no sólo debe ser entre tus campos B.CODEST y A.CODIGO sino también con estos dos.

La consulta quedaría entonces más o menos asi:

1
2
3
4
5
6
7
8
SELECT B.NOMBRE, COUNT(*) TOTAL
FROM  NOMPES A INNER JOIN NOMEST B
ON A.CODEST = B.CODIGO AND
A.CIA = B.CIA AND
A.TIPONOMINA = B.TIPONOMINA
WHERE
A.TIPONOMINA = 'E' AND A.CIA = 'D01'
GROUP BY B.NOMBRE



Observa que cambié el orden en que presentas las tablas. Es conveniente que en el FROM pongas aquellas tablas con más registros, y en el INNER JOIN todas las tablas catálogos. Aunque en realidad esto no afectaría el resultado de la consulta.

Haz la prueba y nos comentas los resultados.

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

Problema en Query (Ayudaaaa)

Publicado por Jose Quintana (6 intervenciones) el 18/08/2011 18:18:38
Excelentes ambas colaboraciones muy agradecido con uds. aunque la que me dio el resultado que esperaba fue el de LEO porque yo estaba realizando la consulta mal y leo envio la consulta correcta.

Agradecidos con ambos.
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