2014-03-05 27 views
0

每當我添加一個計數以下select語句,它會導致它給我的錯誤,我不知道爲什麼:多表查詢

select "WorkOrder"."WorkOrderID", "Vehicles"."Model", "Vehicles"."Color", 
"Vehicles"."LicensePlate", COUNT("WorkOrderPart"."WorkPartID") AS "Parts" 
FROM "WorkOrder", "Vehicles", "WorkOrderPart" 
WHERE "WorkOrder"."VIN" = "Vehicles"."VIN" AND 
"WorkOrder"."WorkOrderID" = "WorkOrderPart"."WorkOrderID"; 

每當我運行此,我得到以下錯誤:

select "WorkOrder"."WorkOrderID", "Vehicles"."Model", "Vehicles"."Color", 
     * 
ERROR at line 1: 
ORA-00937: not a single-group group function 

我該怎麼辦?我正在用Oracle數據庫運行SQL命令行。

回答

6

當你有一個count(或其他聚合函數),你需要group by非聚集項

select 
    "WorkOrder"."WorkOrderID", 
    "Vehicles"."Model", 
    "Vehicles"."Color", 
    "Vehicles"."LicensePlate", 
    COUNT("WorkOrderPart"."WorkPartID") AS "Parts" 
FROM "WorkOrder", "Vehicles", "WorkOrderPart" 
WHERE "WorkOrder"."VIN" = "Vehicles"."VIN" 
AND "WorkOrder"."WorkOrderID" = "WorkOrderPart"."WorkOrderID" 
group by "WorkOrder"."WorkOrderID", "Vehicles"."Model", "Vehicles"."Color", 
"Vehicles"."LicensePlate" 

順便說一句,它被認爲是很好的做法,使用顯式連接(除非你使用甲骨文的史前版本),而不是where條款

FROM "WorkOrder" 
    inner join "Vehicles" on "WorkOrder"."VIN" = "Vehicles"."VIN" 
    left join "WorkOrderPart" on "WorkOrder"."WorkOrderID" = "WorkOrderPart"."WorkOrderID" 
+0

是的,與其他的功能太像'SUM','MIN'或'MAX' - 編輯:剛剛看到您的更新:) –

+0

這並不工作,但,似乎我混淆了編輯自己。我的目標是爲WorkOrder表中的每個WorkOrderID生成一行,併爲Count COUNT計數返回0或更多。這隻返回1行。 – user3169698

+0

您可能想要將工作順序和工作順序之間的「內部連接」更改爲「左連接」 - 請參閱上面的編輯 – podiluska