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

No logro conseguir un resultado en una query

Estas en el tema de No logro conseguir un resultado en una query en el foro de PostgreSQL en Foros del Web. Hola, Tengo dos tablas una de coches y otra servicios con la siguiente informacion: Coches:matricula(PK),capacidad Servicios:id_servicio,id_usuario,matricula(FK),tur no(turno puede ser M->mañana o T->Tarde),fecha_alta Hago la siguiente ...
  #1 (permalink)  
Antiguo 25/04/2009, 05:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 10
Antigüedad: 16 años, 6 meses
Puntos: 0
No logro conseguir un resultado en una query

Hola,

Tengo dos tablas una de coches y otra servicios con la siguiente informacion:

Coches:matricula(PK),capacidad
Servicios:id_servicio,id_usuario,matricula(FK),tur no(turno puede ser M->mañana o T->Tarde),fecha_alta

Hago la siguiente query mostrar los plazas libres que me quedan de cada coche en funcion del turno y capacidad

select c.matricula, c.capacidad,c.modelo,s.turno,capacidad-count(*) as libres
from servicios s, coches c
where s.matricula=c.matricula
group by c.matricula, c.capacidad,s.turno
order by c.matricula, c.capacidad,s.turno

....Y obtengo este resultado
Matricula Capacidad Turno Libres
"ABC-1234"; 5; "M"; 3
"ABC-1234"; 5; "T"; 1
"DDD-9999"; 15; "M"; 14
"DDD-9999"; 15; "T"; 14
"EFG-4567"; 8; "M"; 7
"EFG-4567"; 8; "T"; 8

Pero el resultado que yo quisiera mostrar con sólo una query seria:
Matricula Capacidad LibresM LibresT
"ABC-1234"; 5; 3 1
"DDD-9999"; 5; 14 14
"EFG-4567"; 15; 7 8

¿Alguna idea? ¡Muchas gracias!

Última edición por Orpheus_v; 25/04/2009 a las 08:54
  #2 (permalink)  
Antiguo 25/04/2009, 08:37
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: No logro conseguir un resultado en una query

que tal orpheus

Prueba con:

Código sql:
Ver original
  1. SELECT c.matricula, c.capacidad,turnoM.libres AS libresM, turnoT.libres AS libresT
  2. FROM servicios s, coches c, (SELECT c.matricula AS matri, capacidad-COUNT(*) AS libres
  3. FROM servicios s, coches c
  4. WHERE s.matricula=c.matricula AND turno = 'M'
  5. GROUP BY c.matricula, c.capacidad,s.turno
  6. ORDER BY c.matricula, c.capacidad,s.turno ) AS turnoM, (SELECT c.matricula AS matri, capacidad-COUNT(*) AS libres
  7. FROM servicios s, coches c
  8. WHERE s.matricula=c.matricula AND turno = 'T'
  9. GROUP BY c.matricula, c.capacidad,s.turno
  10. ORDER BY c.matricula, c.capacidad,s.turno ) AS turnoT
  11. WHERE s.matricula=c.matricula AND turnoT.matri = c.matricula
  12. AND turnoM.matri = c.matricula
  13. GROUP BY c.matricula, c.capacidad,turnoM.libres,turnoT.libres
  14. ORDER BY c.matricula, c.capacidad

Espero te sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/04/2009, 08:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 10
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: No logro conseguir un resultado en una query

Huesos52

¡Y tanto que me ha servido! ¡Muchísimas gracias!
Ahora intentaré conseguir que si un coche no tiene servicios en el turno de tarde, y si en el de mañana, o que no tenga servicios asociados al de mañana y tarde también me muestre la información y ponga un 0. Pq con tu superquery sólo muestra el coche si tiene servicios asociados al turno de mañana y tarde

Muchas, muchas gracias!










Cita:
Iniciado por huesos52 Ver Mensaje
que tal orpheus

Prueba con:

Código sql:
Ver original
  1. SELECT c.matricula, c.capacidad,turnoM.libres AS libresM, turnoT.libres AS libresT
  2. FROM servicios s, coches c, (SELECT c.matricula AS matri, capacidad-COUNT(*) AS libres
  3. FROM servicios s, coches c
  4. WHERE s.matricula=c.matricula AND turno = 'M'
  5. GROUP BY c.matricula, c.capacidad,s.turno
  6. ORDER BY c.matricula, c.capacidad,s.turno ) AS turnoM, (SELECT c.matricula AS matri, capacidad-COUNT(*) AS libres
  7. FROM servicios s, coches c
  8. WHERE s.matricula=c.matricula AND turno = 'T'
  9. GROUP BY c.matricula, c.capacidad,s.turno
  10. ORDER BY c.matricula, c.capacidad,s.turno ) AS turnoT
  11. WHERE s.matricula=c.matricula AND turnoT.matri = c.matricula
  12. AND turnoM.matri = c.matricula
  13. GROUP BY c.matricula, c.capacidad,turnoM.libres,turnoT.libres
  14. ORDER BY c.matricula, c.capacidad

Espero te sirva.
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 12:17.