Convierta MySQL Query a Oracle9i, SQL Server y DB2

Aquí está la consulta MySQL para mis mesas aquí:

SELECT vc.vehicle_class_name
, GROUP_CONCAT(CASE WHEN v.status = 2 THEN v.vehicle_id END) completed
, GROUP_CONCAT(CASE WHEN v.status <> 2 THEN v.vehicle_id END) incomplete
FROM vehicle_class vc
JOIN vehicle v
ON v.vehicle_class_id = vc.vehicle_class_id
GROUP 
BY vc.vehicle_class_id;

Necesito ayuda para convertir en Oracle9i, DB2 y SQL Server.

Por favor, ayuda.

preguntado el 03 de mayo de 12 a las 18:05

'caso cuando' en Oracle con funciones agregadas pero no funciona. -

Oracle9i ya no es compatible. ¿Por qué usas una versión tan desactualizada? -

1 Respuestas

Aquí hay una solución de Oracle9i. El trabajo se realiza con la función SYS_CONNECT_BY_PATH que necesita la cláusula CONNECT BY en la consulta. Para conectar filas por algo, la tabla VEHÍCULO está "preparada" ... se completa con los números de fila actuales y anteriores.

SELECT
  vc.vehicle_class_name,
  RTRIM(REPLACE(MAX(SYS_CONNECT_BY_PATH(v.completed,'|')) KEEP (DENSE_RANK LAST ORDER BY v.curr),'|',''),',') completed,
  RTRIM(REPLACE(MAX(SYS_CONNECT_BY_PATH(v.incomplete,'|')) KEEP (DENSE_RANK LAST ORDER BY v.curr),'|',''),',') incomplete
FROM
(SELECT
   vehicle_class_id,
   CASE WHEN status=2 THEN vehicle_id||',' END completed,
   CASE WHEN status<>2 THEN vehicle_id||',' END incomplete,
   ROW_NUMBER() OVER (PARTITION BY vehicle_class_id ORDER BY vehicle_id) curr,
   ROW_NUMBER() OVER (PARTITION BY vehicle_class_id ORDER BY vehicle_id)-1 prev
 FROM
   vehicle) v JOIN vehicle_class vc
ON v.vehicle_class_id=vc.vehicle_class_id
GROUP BY
  vc.vehicle_class_name
CONNECT BY
  v.prev=PRIOR v.curr AND v.vehicle_class_id=PRIOR v.vehicle_class_id
START WITH
  v.curr=1;

Respondido el 05 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.