Hola,
En la descripción de tu modelo de datos me falta alguna tabla y me sobra otra.
La tabla
Clientes, dices que los datos del cliente los tienes junto con los de la orden, esto seria un error de diseño ya que te obliga a repetir los datos del cliente para cada orden que este haga, mas adelante en tu post hablas de una tabla clientes....pero en el query que nos pones no lausas...?!?!
Por otro lado tienes una tabla
Cita: ORDENES TOTAL ot (aqui guardo el precio total de la orden)
la que sugiere que deberia existir una ordenesDetalle con los datos que conforman ese total.
En principio la tabla total no haria falta puesto que el total puedes calcularlo a partir del detalle.
Debes seguir el princio de guardar totdos los datos unicos de una orden en la tabla Ordenes (la fecha de alta o inicial és un dato unico) y aquellos datos que no sean unicos (fechas de modificación, detalle del pedido...) en otra tabla.
Por tanto vamos a clarificar
ORDENES
idOrden
idCliente
fechaAlta
...
(aqui se guardan los datos de la orden,
incluida fecha de alta o creació, otros campos fechaBaja... el total yo no lo pondria)
CLIENTES
idCliente
nombre
apellido
....
ORDENES HISTORIAL
idOrdenHist
idOrden
fecha
....
(aqui fecha a fecha el historial de la orden, o sea cuando fue realizada la orden, a media que la orden se apruebe o sufra otras modificaciones, se ira guardando una fecha para la modificacion realizada)
ORDENES_DETALLE
idOdernesDetalle
idOrden
descripcion
precio
...
(guardará los detalles de la orden, en especial los valores que deben formar el total de la orden, precio....)
Código sql:
Ver originalSELECT COUNT(*) AS nordenes
FROM ordenes o1
WHERE o1.idcliente=X
esto nos da el numero de ordenes del cliente con id=X
Código sql:
Ver originalSELECT SUM(od.precio) AS total
FROM OrdenesDetalle od
WHERE od.idOrden=Y
esto nos da el total de la orden con id=Y
Luego
Código sql:
Ver originalSELECT
o.orden_id,
o.cliente_id,
c.nombre,
c.apellido,
(SELECT SUM(od.precio) AS total
FROM OrdenesDetalle od
WHERE od.idOrden=o.orden_id) AS total,
(SELECT COUNT(*) AS nordenes
FROM ordenes o1
WHERE o1.idcliente=o.cliente_id) AS count_orden,
o.fechaAlta AS fecha
FROM Ordenes o
INNER JOIN clientes c
ON o.idCliente=c.idCliente
esto nos da una lista de ordenes orden_id, Cliente_id, Nombre, Apellido, total, count_orden, fecha que creo que es lo que buscas...
Quim