Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Que hay mal en la consulta SQL??

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Que hay mal en la consulta SQL?? Responder citando

Hola al foro.
Tengo programada la siguiente consulta SQL:

sentencia="SELECT 21_Incidencias.CodPlaca, 21_Incidencias.Equipo, COUNT(21_Incidencias.NumPlaca) AS Cantidad,COUNT(22_DetalleIncidencias.ID_DetIncidencia) AS Incidencias FROM 21_Incidencias, 22_DetalleIncidencias GROUP BY 21_Incidencias.CodPlaca";

Pero me da error en el primer campo de la consulta (sea cual sea) y no me funciona. Yo creo que está bien pero ya dudo de todo. Alguna idea?
Salu2.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola Niteman, creo que el problema esta en el segundo campo, que no coincide con el que estas agrupando (los otros son counts asi que no son un problema).
Probaste sacando "21_Incidencias.Equipo" del Select?

saludos
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En las sentencias GROUP BY hay que poner campos de la SELECT, y no tablas completas. Yo entiendo que lo correcto sería algo así:
Código:
SELECT 21_Incidencias.CodPlaca, 21_Incidencias.Equipo, COUNT(21_Incidencias.NumPlaca) AS Cantidad,COUNT(22_DetalleIncidencias.ID_DetIncidencia) AS Incidencias FROM 21_Incidencias, 22_DetalleIncidencias GROUP BY 21_Incidencias.CodPlaca, 21_Incidencias.Equipo

De todas formas, ¿no te resultaría más fácil usar identificadores de tabla más sencillos (cortos)? No sé, algo así:
Código:
SELECT A.CodPlaca, A.Equipo, COUNT(A.NumPlaca) Cantidad, Count(B.ID_DetIncidencia) Incidencias
FROM 21_Incidencias A, 22_DetalleIncidencias B
GROUP BY CodPlaca, Equipo

Más que nada para escribir menos; y la palabra reservada AS puedes suprimirla. Además, en el GROUP BY, en los campos de la primera tabla declarada puedes no poner el identificador.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola compañeros. Gracias por las respuestas.
Aunque parezca mentira todo fallaba porque los nombres de las tablas empiezan por un número (explicacion?). Les he cambiado los nombre y ha funcionado. De todas maneras voy a probar vuestros consejos como quitar el AS, acortar los nombres, etc.
Salu2.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Ah! Ahora que lo decis, creo que haber leido en algun manual eso de que no podian comenzar con numero. Lo importante es que ande. Cosas de la vida Smile

saludos
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Es verdad, no me había dado cuenat de ese matiz.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Bueno, otra de SQL que veo que dominais. Yo gracias al foro y los manuales que sino......

Al tema. La cuestion es que tengo dos tablas Maestro-detalle:
B1_Incidencias donde almaceno el número interno de placa de circuito impreso entre otros datos. Hay diferentes modelos de CI que pertenecen a diferentes equipos.
B2_DetalleIncidencias donde se almacenan las averias encontradas en cada una de ellas. Cada averia tiene un código.
Se relacionan por el campo NumPlaca (numero de la placa)

Hago la siguiente consulta de referencia cruzada con el fin de obtener una tabla "resumen":

TRANSFORM COUNT(B2_DetalleIncidencias.ID_DetIncidencia) AS Cantidad
SELECT DISTINCT B1_Incidencias.CodPlaca, B1_Incidencias.Equipo, B1_Incidencias.NumOF, COUNT(B1_Incidencias.NumPlaca) AS Test
FROM B1_Incidencias
INNER JOIN B2_DetalleIncidencias ON B1_Incidencias.NumPlaca=B2_DetalleIncidencias.NumPlaca
GROUP BY B1_Incidencias.CodPlaca, B1_Incidencias.Equipo, B1_Incidencias.NumOF PIVOT B2_DetalleIncidencias.CodAveria

La cuestion es que COUNT(B1_Incidencias.NumPlaca) me devuelve la cantidad total de averias por tipo de placa (CodPlaca), es decir, si he revisado 3 CI's y he encontrado 5 averias me devuelve 5 cuando yo quiero que me devuelva el 3 porque las averias ya las tengo especificadas en cada campo del PIVOT (tipos de averias)

Como lo puedo hacer??

Salu2.

P.D. Siento el tocho. Ah! soy Niteman es que no he hecho el login.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.