Hola Jesús
Lo planteas, según entiendo es hacer un "Cross Table" o "Pivot Table".
Una forma de lograrlo es por medio de un procedimiento almacenado, pero en tu caso puede ser más simple si el número de estados posibles es fijo.
Prueba con un query de este tipo:
Código SQL
[-]
SELECT detalle.id_producto,
SUM (CASE detalle.estado WHEN 'alta' THEN 1 ELSE 0 END) alta,
SUM (CASE detalle.estado WHEN 'baja' THEN 1 ELSE 0 END) baja,
SUM (CASE detalle.estado WHEN 'modificacion' THEN 1 ELSE 0 END) modificacion,
FROM detalle
GROUP BY detalle.id_producto
Aún no lo he probado, pero en principio debería funcionar con algunos ajustes.
Saludos