2017-04-02 2 views
0

저는 지난 달 동안 수리가 필요한 차량 수와 서비스가 필요한 차량 수를 확인하기 위해 보고서를 작성하려고합니다. 아래에 표시된 것처럼 차량이 수리를받은 경우 1이 할당되고, 그렇지 않으면 0입니다. 이는 현재 내 시도이며 원하지 않는 1과 0 모두를 반환합니다. 어떤 도움이라도 대단히 감사합니다. 당신이 보여 데이터와SQL에서 1 초만 계산하는 방법은 무엇입니까?

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

Table

, 당신은 단순히 sum()보다는 count() 사용할 수 있습니다 : 값이 0 또는 1이 될 것으로 보이므로이 작동

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; 

합니다. 즉, 이러한 열은 이러한 목적으로 합계 될 수있는 플래그로 설계됩니다.

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

참고 : 당신은 모든 열 이름을 정규화해야

  • 가 다른 값을 취할 수 있다면

    , 당신은 같은 것을 사용합니다. 나는 기둥이 어디서 오는지 추측하고있다.

  • FROM 절에 쉼표를 사용하지 마십시오. 항상은 적절하고 명시적인 JOIN 구문을 사용합니다. 그 절에

    where vehicles.Vehicle_ID = vehicles_inspections.Vehicle_ID 
    

    이 추가 : 절은 어디

+0

안녕하세요, 완벽하게 작동하는 사람, 그냥 왜 쉼표를 사용해서는 안되는지 궁금합니다. 저는 최근에 SQL을 사용하기 시작했습니다. 나는 그들을 사용하지 않는군요. –

+1

@ leonHill. . . 그들은 오래된 구식 구문이며 * 수십 년 동안 *되었습니다. 적절한 구문은 명백한'JOIN'입니다. 그것은 더 강력하고 표준입니다 (두 가지 주된 이유). 게다가 거의 모든 사람들이 WHERE 절에 혼합하지 않고 조인 조건이 테이블 참조와 관련된 쿼리를 따르는 것이 더 쉽다는 것을 알게됩니다. 그리고 만약 당신이 SQL을 배우고 있다면, "join"에 대한'JOIN'을 배우는 것이 "join"에 대한 "* comma *"를 배우는 것이 훨씬 더 합리적입니다. –

+0

고마워요. 이제 쉼표 대신 조인을 사용하기 시작하겠습니다. 모든 도움 주셔서 감사합니다. –

0

이것은 당신의 기존됩니다

and repair_service_complete = 0 
and repair = 1 

또는 이와 유사한 어떤 필터는 비즈니스 요구 사항을 달성 할 수있다.

관련 문제