0

サンプルテーブルと説明については、ここをクリックしてください

添付画像のとおり、「VEHICLE」と「VEHICLE_CLASS」の2つのテーブルがあります。

添付の画像に示すように、各VEHICLE_CLASSがステータスごとにグループ化したVEHICLESの数を含む結果行を取得するためのクエリが必要です。

クエリは、任意のデータベース(MySQL / Oracle / MSSQL / DB2)で使用できるように、汎用である必要があります。

助けてください。

CREATE TABLE VEHICLE 
(
    VEHICLE_ID varchar(20), 
    VEHICLE_CLASS_ID varchar(30),
    STATUS int
);

CREATE TABLE VEHICLE_CLASS
(
    VEHICLE_CLASS_ID varchar(30),
    VEHICLE_CLASS_NAME varchar(30)
);

INSERT INTO VEHICLE
   (VEHICLE_ID, VEHICLE_CLASS_ID, STATUS)
VALUES
   ('vehicle_001', 'vehicle_class_001', 0),
   ('vehicle_002', 'vehicle_class_002', 1),
   ('vehicle_003', 'vehicle_class_003', 2),
   ('vehicle_004', 'vehicle_class_001', 0),
   ('vehicle_005', 'vehicle_class_002', 2),
   ('vehicle_006', 'vehicle_class_001', 0),
   ('vehicle_007', NULL, 1);


INSERT INTO VEHICLE_CLASS
   (VEHICLE_CLASS_ID, VEHICLE_CLASS_NAME)
VALUES
   ('vehicle_class_001', 'ABC'),
   ('vehicle_class_002', 'BCD'),
   ('vehicle_class_003', 'EFG'); 

これが私が試したが望ましい結果を得ることができなかったクエリです:

SELECT veh.VEHICLE_CLASS_ID, vehclass.VEHICLE_CLASS_NAME, 
    SUM( CASE WHEN veh.STATUS=2 THEN COUNT(veh.VEHICLE_ID) end) Completed,
    SUM( CASE WHEN veh.STATUS!=2 THEN COUNT(veh.VEHICLE_ID) end) not_completed
FROM VEHICLE veh LEFT JOIN VEHICLE_CLASS vehclass on veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID
    GROUP BY veh.VEHICLE_CLASS_ID having veh.VEHICLE_CLASS_ID is not null;
4

5 に答える 5

1

あなたはかなり近いところにいます。その代わりに SUM( CASE WHEN veh.STATUS=2 THEN COUNT(veh.VEHICLE_ID)、1 と VEHICLE_CLASS_NAME でグループ化する必要があります (MySQL を除きますが、他の環境で機能させたいと考えていました)。

SELECT veh.VEHICLE_CLASS_ID, 
       vehclass.VEHICLE_CLASS_NAME, 
       Sum(CASE 
             WHEN veh.STATUS = 2 THEN 1 
           END) Completed, 
       Sum(CASE 
             WHEN veh.STATUS <> 2 THEN 1 
           END) not_completed 
FROM   VEHICLE veh 
       LEFT JOIN VEHICLE_CLASS vehclass 
         ON veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID 
GROUP  BY veh.VEHICLE_CLASS_ID, 
          vehclass.VEHICLE_CLASS_NAME 
HAVING veh.VEHICLE_CLASS_ID IS NOT NULL; 

デモ SQL サーバー

デモ MySQL

デモオラクル

ノート

  • Lamakが指摘したように<>、通常は使用され!=ますが、十分にサポートされているようですが、テストする必要があります
  • Else 0画像の SUM_not_completed に空白が含まれていたため、追加しませんでした。COALACEこれを行うか、ゼロが必要な場合はa を追加するかを選択できます
  • MySQL を使用していることがわかっている場合は、を削除して実行できCASEますSum(veh.STATUS = 2) Completed
于 2012-05-10T15:11:30.930 に答える
0
SELECT VC.VEHICLE_CLASS_ID, VC.VEHICLE_CLASS_NAME, 
    SUM(CASE WHEN V.STATUS=2 THEN 1 ELSE 0 END) Completed,
    SUM(CASE WHEN V.STATUS!=2 THEN 1 ELSE 0 END) not_completed
FROM VEHICLE V
    JOIN VEHICLE_CLASS VC on V.VEHICLE_CLASS_ID = VC.VEHICLE_CLASS_ID
GROUP BY VC.VEHICLE_CLASS_ID, VC.VEHICLE_CLASS_NAME
于 2012-05-10T15:17:50.273 に答える
0

これを試して:

SELECT  veh.VEHICLE_CLASS_ID, 
        vehclass.VEHICLE_CLASS_NAME, 
        SUM(CASE WHEN veh.STATUS = 2 THEN 1 ELSE 0 END) Completed,
        SUM(CASE WHEN veh.STATUS <> 2 THEN 1 ELSE 0 END) not_completed
FROM VEHICLE veh 
LEFT JOIN VEHICLE_CLASS vehclass 
ON veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID
WHERE veh.VEHICLE_CLASS_ID IS NOT NULL
GROUP BY veh.VEHICLE_CLASS_ID, vehclass.VEHICLE_CLASS_NAME;
于 2012-05-10T15:12:39.483 に答える
0

多分このようなもの:

SELECT
    VEHICLE_CLASS.VEHICLE_CLASS_NAME,
    (
        SELECT
            COUNT(*)
        FROM
            VEHICLE
        WHERE
            VEHICLE.STATUS=2
            AND VEHICLE.VEHICLE_CLASS_ID=VEHICLE_CLASS.VEHICLE_CLASS_ID
    ) AS SUM_Completed,
    (
        SELECT
            COUNT(*)
        FROM
            VEHICLE
        WHERE
            VEHICLE.STATUS IN (1,0)
            AND VEHICLE.VEHICLE_CLASS_ID=VEHICLE_CLASS.VEHICLE_CLASS_ID
    ) AS SUM_Not_Completed
FROM
    VEHICLE_CLASS
于 2012-05-10T15:13:17.793 に答える
0
select vehclass.VEHICLE_CLASS_NAME,
    SUM(case when veh.status = 2 then 1 end) Completed,
    SUM(case when veh.status != 2 then 1 end) not_completed
from VEHICLE veh
left join VEHICLE_CLASS vehclass on veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID
where veh.VEHICLE_CLASS_ID is not null
group by veh.VEHICLE_CLASS_NAME
于 2012-05-10T15:13:44.813 に答える