2017-03-15 71 views
0

我想运行此查询,但它给我错误。计算子查询select语句中的聚合值SQL

列'Order.OrderId'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

这里是我的查询:

SELECT vc.VehicleCategoryName, 
    (SELECT COUNT(oc.OrderId) FROM [Order] oc WHERE oc.OrderId = o.OrderId AND c.OrderStatusId = 2) AS completedTrip, 
    (SELECT COUNT(oc.OrderId) FROM [Order] oc WHERE oc.OrderId = o.OrderId AND oc.OrderStatusId = 3) AS CanceledTrip 
FROM [Order] o 
INNER JOIN VehicleCategory vc ON vc.VehicleCategoryId = o.VehicleCategoryId 
WHERE CAST(o.OrderTime AS date) = '2017-03-13' 
GROUP BY vc.VehicleCategoryName; 

我想我的形成数据是这样的:

VehicleCategoryName|Completed Trips | Canceled Trips 
    Bugdet    100    20 
    Premier    50    10 
    Rocket    20    20 

请帮忙什么是错的,我用骨料在做什么?

+0

请不要使用JavaScript/HTML片段格式,除非它是Javascript或HTML或CSS – GrabNewTech

+0

哪个DBMS您使用的?在你的问题中有非标准的SQL –

回答

1

您不需要关联的子查询。您可以使用COUNT代替CASE

试试这个:

select vc.VehicleCategoryName, 
    count(case when o.OrderStatusId = 2 then 1 end) as completedTrip, 
    count(case when o.OrderStatusId = 3 then 1 end) as CanceledTrip 
from [Order] o 
inner join VehicleCategory vc on vc.VehicleCategoryId = o.VehicleCategoryId 
where cast(o.OrderTime as date) = '2017-03-13' 
group by vc.VehicleCategoryName 

它使用的事实,上述情况语句只会在匹配条件和空返回1,否则和count函数计算唯一的非空值。

+0

谢谢,但是如果我必须从另一个表像Like Fare table中获取值来计算收益,该怎么办?对每个类别的总收入? –

+0

@naveedahmed - 你可以加入这个表。 – GurV

+0

可否请您编辑您的答案请我的表是票价有外键OrderId –

0
SELECT 
vc.VehicleCategoryName , 
SUM(CASE WHEN o.OrderStatusId = 2 THEN 1 ELSE 0 END) as completedTrip , 
SUM(CASE WHEN o.OrderStatusId = 3 THEN 1 ELSE 0 END) as CanceledTrip 

FROM [Order] o 

inner join VehicleCategory vc 
on vc.VehicleCategoryId = o.VehicleCategoryId 
where cast(o.OrderTime as date) = '2017-03-13' 

group by vc.VehicleCategoryName 
0

请试试这个,

SELECT vc.VehicleCategoryName, 
    (SELECT COUNT(oc.OrderId) FROM [Order] oc WHERE oc.OrderId = o.OrderId AND c.OrderStatusId = 2) AS completedTrip, 
    (SELECT COUNT(oc.OrderId) FROM [Order] oc WHERE oc.OrderId = o.OrderId AND oc.OrderStatusId = 3) AS CanceledTrip 
FROM [Order] o 
INNER JOIN VehicleCategory vc ON vc.VehicleCategoryId = o.VehicleCategoryId 
WHERE CAST(o.OrderTime AS date) = '2017-03-13' 
GROUP BY vc.VehicleCategoryName,o.OrderId