3

请查看我下面的表格...是否可以构建一个能够1

)计算所有具有 class_id 1 的车辆的 total_time 的总和(无论 feature_id 是什么)
(结果为 6:35)
2)计算总和具有 class_id 1 和 feature_id 2 的所有车辆的总时间
(根据 vehicle_id 22 和 24,结果将是 5:35)

我能够在两个单独的查询中获得结果,但我希望在一个查询中检索它们......类似于:

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 不是唯一的)
vehicle_id | 总时间
--------------|--------------
      22 2:00
      22 0:30
      23 1:00
      24 2:20
      24 0:45

表 2:VEHICLE_TABLE(vehicle_id 是唯一的)
vehicle_id | class_id
--------------|--------------
      22 1
      23 3
      24 1

表 3:VEHICLE_FEATURES_TABLE(vehicle_id 不是唯一的,但 feature_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

除非您希望将结果放在一起,否则将它们放在一个查询中似乎没有多大意义。
如果是这样,只需在 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 回答