Sql 使用子查询查询燃油使用情况

Sql 使用子查询查询燃油使用情况,sql,oracle,subquery,Sql,Oracle,Subquery,搜索Stackoverflow,无法找到我问题的答案(可能在那里,但没有看到答案) 具有以下查询,其中列出了存储在主表中某个位置的多辆车辆的已用里程、燃油成本和燃油量。还有一个子查询,用于计算每英里的成本-在该子查询中,有一个WHERE子句,除非fuel_qty>0(不能除以零,除非您是Chuck Norris-ha)。如果燃油数量为零值,则还需要显示零(在本查询的第3行中)。我在这个查询中遇到一个错误,说它“不是一个单一的组函数”。有什么东西我错过了或没有看到 已尝试将每英里成本添加到grou

搜索Stackoverflow,无法找到我问题的答案(可能在那里,但没有看到答案)

具有以下查询,其中列出了存储在主表中某个位置的多辆车辆的已用里程、燃油成本和燃油量。还有一个子查询,用于计算每英里的成本-在该子查询中,有一个WHERE子句,除非fuel_qty>0(不能除以零,除非您是Chuck Norris-ha)。如果燃油数量为零值,则还需要显示零(在本查询的第3行中)。我在这个查询中遇到一个错误,说它“不是一个单一的组函数”。有什么东西我错过了或没有看到

已尝试将每英里成本添加到group by子句,但收到“无效标识符”错误。然后还向子查询添加了一个GROUPBY子句——但这也不起作用

select cost.mileage_useage
     , cost.fuel_cost
     , cost.fuel_qty
     , (select (sum(cost1.mileage_usage / cost1.fuel_qty) * cost1.fuel_cost)
        from cost cost1
        where cost1.fuel_qty > 0) as cost_per_mile
from cost
inner join main on main.equip_no = cost.equip_no
where main.stored_loc = 4411
group by 
     cost.mileage_useage
   , cost.fuel_cost
   , cost.fuel_qty

为什么这不符合你的要求

select c.mileage_useage, c.fuel_cost, c.fuel_qty,
       (sum(c.mileage_usage) * c.fuel_cost /
        nullif(c.fuel_qty, 0)
       ) as cost_per_mile
from cost c inner join
     main m
     on m.equip_no = c.equip_no
where main.stored_loc = 4411
group by c.mileage_useage, c.fuel_cost, c.fuel_qty

相信我找到了答案-谢谢你的帮助!如果里程使用率=0或为负数,这将考虑在内。此外,如果燃油量=0,则方程式的该部分不可能除以零值。这可能看起来有点奇怪,但这是可行的

select cost.mileage_useage
     , cost.fuel_cost
     , cost.fuel_qty
     , ( sum(((CASE WHEN cost.mileage_usage = 0 THEN 1
         WHEN cost.mileage_usage < 0 THEN TO_NUMBER(NULL)
         ELSE cost.mileage_usage END) 
         / DECODE(eq_cost.fuel_qty,0, 1, eq_cost.fuel_qty)) 
         * eq_cost.fuel_cost )) as cost_per_mile
from cost
inner join main on main.equip_no = cost.equip_no
where main.stored_loc = 4411
group by cost.mileage_useage
      , cost.fuel_cost
      , cost.fuel_qty
选择cost.milies\u usage
,成本。燃料成本
,成本。燃料数量
,(总和((当cost.miliety_用法=0时,则为1
当cost.Miledge_使用率<0时,则为_编号(空)
其他成本。里程(使用结束)
/解码(均衡器成本。燃料数量,0,1,均衡器成本。燃料数量))
*等式成本(燃料成本)作为每英里成本
成本
main.Equipment\u no=成本.Equipment\u no上的内部连接干管
其中main.storaged_loc=4411
按成本、里程和使用情况分组
,成本。燃料成本
,成本。燃料数量

您可以进一步简化它,如下所示:

select cost.mileage_useage
     , cost.fuel_cost
     , cost.fuel_qty
     , sum((CASE WHEN cost.mileage_usage = 0 THEN eq_cost.fuel_cost
         WHEN cost.mileage_usage > 0 THEN cost.mileage_usage * eq_cost.fuel_cost END) 
         / (case when eq_cost.fuel_qty = 0 then 1 else eq_cost.fuel_qty end)) as cost_per_mile
from cost
inner join main on main.equip_no = cost.equip_no
where main.stored_loc = 4411
group by cost.mileage_useage
      , cost.fuel_cost
      , cost.fuel_qty;

干杯

样本数据、期望的结果以及对您想要做的事情的解释都会非常有用。@GordonLinoff样本数据我相信会是这样的。。。里程使用率=410燃料成本=3.20燃料数量=25成本每英里=32.48是
cost
cost1
单独的表?@BobJarvis-no cost1是用于区分成本表和子查询中使用的相同表的子查询。可能写得不完全正确。已更改给定的脚本示例以使其更清楚。在某些情况下,Miledge_的使用是负数。也许这与此有关?谢谢你的回答,但它似乎不起作用。。。一旦我在里程数使用中添加了一个nullif,它就有点起作用了。我想我可能需要进一步研究这个问题。谢谢你@GordonLinoff@丽贝卡。我不知道负数是什么意思。也许你应该问另一个问题,关于那一列中的负数。