2012-05-03 7 views
-2

にMySQLのクエリを変換しmy tables hereのためのMySQLのクエリです:はここでのOracle9i、SQL ServerおよびDB2

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の変換を助ける必要が。

助けてください。

+0

「集計機能を備えたoracleでは動作しません。 – user1373028

+0

Oracle9iはサポートされなくなりました。なぜあなたはそのような古いバージョンを使用していますか? –

答えて

1

ここにはOracle9iソリューションがあります。 ジョブは、クエリでCONNECT BY句を必要とするSYS_CONNECT_BY_PATH関数で行われます。 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; 
関連する問題