请查看下面的表格...是否可以构建一个单个查询,以便能够发送左键
1)计算所有拥有class_id 1的车辆的total_time的总和(不论feature_id)
(结果将是6:35)
2)计算所有具有class_id 1且具有feature_id 2的车辆的total_time的总和(结果将是基于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 | TOTAL_TIME
-------------- | --------------
22 2:00
22 0:30
23 1:00
24 2:20
24 0:45
表2:VEHICLE_TABLE (vehicle_id是唯一的)
vehicle_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
答案 0 :(得分: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
答案 1 :(得分:0)
似乎将两者都放在一个查询中没有多大意义,除非你想要将结果放在一起 如果是这样,只需在两个查询之间添加一个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