请看我下面的桌子..。是否可以构建一个单个查询,以便
1)计算所有有class_id 1的车辆(不论feature_id)的total_time之和。
(结果为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: VEHICLE_TABLE (vehicle_id是唯一的)
vehicle_id class_id
商业、商业、金融等行业的商业、商业、金融等行业。
*
商业、商业、金融等领域的商业、金融等领域。
表3: VEHICLE_FEATURES_TABLE (vehicle_id不是唯一的,但feature_id在vehicle_id中是唯一的)
vehicle_id feature_id
商业、商业、金融等行业的商业、商业、金融等行业。
商业、金融等领域的商业、金融等领域。
*
*
*
商业、商业、金融、金融等领域的商业、商业、金融、金融等领域。
商业、商业、金融等行业的商业、金融等行业。
发布于 2012-10-11 16:52:17
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-11 16:31:42
除非您希望将结果放在一起,否则将两者放在一个查询中似乎没有多大意义。
如果是这样,只需在两个查询之间添加一个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 https://stackoverflow.com/questions/12844144
复制相似问题