2017-04-02 69 views
0

我正在嘗試運行一個報告,查看上個月有多少輛車需要維修,需要維修多少輛。如下圖所示,如果一輛車已經修理過,它有一個1分配給它,否則,它是0.這是我目前的嘗試,它返回我不想要的1和0。任何幫助深表感謝。如何在SQL中只計數1?

Table

select 
    vehicles_inspections.Vehicle_ID, 
    make, 
    model, 
    count(Repair), 
    count(Service) 
from vehicles_inspections, vehicles 
where vehicles.Vehicle_ID = vehicles_inspections.Vehicle_ID 
group by Vehicle_ID 

回答

3

與已顯示的數據,你可以簡單地使用sum()而不是count()

select vi.Vehicle_ID, v.make, v.model, sum(vi.Repair), sum(vi.Service) 
from vehicles v join 
    vehicles_inspections vi 
    on v.Vehicle_ID = vi.Vehicle_ID 
group by vi.Vehicle_ID, v.make, v.model; 

這工作,因爲這些值似乎是要麼01。換句話說,這些列被設計爲可以爲此目的進行總結的標誌。

如果他們可以採取其他值,你會使用類似:

sum(case when repair = 1 then 1 else 0 end) as repairs 

注:

  • 你應該有資格所有列名。我在猜測列的來源。
  • 從不FROM條款中使用逗號。 始終使用使用正確的,明確的JOIN語法。
+0

嘿工作完美的人謝謝,只是想知道爲什麼我應該永遠不會使用逗號我只開始使用SQL最近我從來沒有使用它們的牧羣? –

+1

@leonHill。 。 。它們是古老的,過時的語法 - 並且已經過去幾十年了。正確的語法是明確的'JOIN's。這是更強大和標準(兩個主要原因)。另外,幾乎每個人都發現,在連接條件與表引用相關的查詢後面,查詢變得更加容易,而不是混入'WHERE'子句中。如果您正在學習SQL,那麼學習「JOIN」以進行「連接」會更有意義,然後學習「*逗號*」作爲「連接」。 –

+0

非常感謝,我現在開始使用連接而不是逗號。感謝你的幫助 –

0

這是現有的where子句:

where vehicles.Vehicle_ID = vehicles_inspections.Vehicle_ID 

爲了該條款,補充一點:

and repair_service_complete = 0 
and repair = 1 

或任何類似的過濾器實現您的業務需求。