3

以下のテーブルを確認してください... 1) class_id 1 (feature_id に関係なく) を持つすべての車両の total_time の SUM を計算する(結果は 6:35 になります) 2) SUMを計算できる単一のクエリを作成することは可能ですか? class_id 1 と feature_id 2 を持つすべての車両の total_time の合計(結果は vehicle_id 22 と 24 に基づいて 5:35 になります)





2 つの別々のクエリで結果を取得できますが、1 つのクエリで結果を取得することを望んでいました....次のようなものです。

SELECT 
    SUM((CASE WHEN (VEHICLE_TABLE.class_id = 1) then LOG_TABLE.total_time else 0 end)) **AS TOTAL_ALL**,
    ...here goes statement for 2)... AS TOTAL_DIESEL...
FROM LOG_TABLE, VEHICLE_TABLE .....
WHERE VEHICLE_TABLE.vehicle_id = LOG_TABLE.vehicle_id ......


表 1: LOG_TABLE
( vehicle_id は一意ではありません) total_time
--------------|--------------
      22 2:00
      22 0:30
      23 1:00
      24 2:20
      24 0:45

表 2: VEHICLE_TABLE
( vehicle_idは一意) class_id
--------------|--------------
      22 1
      23 3
      24 1

表 3: VEHICLE_FEATURES_TABLE (vehicle_id は一意ではありませんが、feature_id は一意です。 vehicle_id)
vehicle_id | feature_id
--------------|--------------
      22 1
      22 2
      23 1
      23 2
      23 6
      24 2
      24 6

4

2 に答える 2

4
SELECT  SUM(lt.total_time) AS TOTAL_ALL,
        SUM(CASE WHEN (vft.feature_id IS NOT NULL) then LOG_TABLE.total_time else 0 end) AS FEATURE_TOTAL

FROM    VEHICLE_TABLE vt

        JOIN LOG_TABLE lt
        ON vt.vehicle_id = lt.vehicle_id

        LEFT JOIN VEHICLE_FEATURES_TABLE vft
        ON vt.vehicle_id = vft.vehicle_id AND vft.feature_id = 2

WHERE   vt.class_id = 1
于 2012-10-11T16:52:17.353 に答える
0

結果をまとめる必要がない限り、両方を1つのクエリに入れることにはあまり意味がないようです。
その場合は、2つのクエリの間にUNIONを追加するだけです。

同じ行に両方の値を入れたい場合は、次のようにしてみてください。

SELECT (SELECT Sum(X) 
        FROM   TBL 
        WHERE  CLASS_ID = 1)       AS CLS_id1, 
       (SELECT Sum(X) 
        FROM   TBL 
        WHERE  CLASS_ID = 1 
               AND FEATURE_ID = 2) AS CLS_id1_FTR_ID2 
于 2012-10-11T16:31:42.850 に答える