-2

这是我的表的 MySQL 查询:

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;

我需要帮助转换 Oracle9i、DB2 和 SQL Server。

请帮忙。

4

1 回答 1

1

这是一个Oracle9i 解决方案。这项工作是使用 SYS_CONNECT_BY_PATH 函数完成的,该函数需要查询中的 CONNECT BY 子句。为了通过“准备”某些 VEHICLE 表来连接行......它填充了 curr 和 prev 行号。

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;
于 2012-06-05T16:13:36.300 回答