주어진 문제에 대해 쿼리를 작성해야하는 데이터베이스 관리 시스템에 할당이 있습니다. 나는 4 가지 문제를 가지고 있는데, 그 중 3 가지를 해결하고 마지막 문제를 고집했다.SQLite - null 인 경우 0을 반환합니다.
세부 사항 :
- 치누크 데이터베이스 (https://chinookdatabase.codeplex.com/)의 1.4 버전을 사용.
- SQLite는 DB 브라우저
- 치누크 SQLite는 AutoIncrementPKs.sqlite 치누크 파일과 디렉토리에 파일은 내가
문제 문에 작업하고있는 데이터베이스입니다 : 쿼리를 작성 고객 지원 담당자 인 고객 송장을 통해 가져온 금액을 기준으로 직원 순위 목록을 생성합니다. 결과 세트 (아래 그림 참조)에는 ID (e_id), 이름 (e_first 이름), 성 (e_last_name), 직위 (모든 고객을 지원하지 않는 직원 포함)의 모든 직원에 대해 다음 필드가 순서대로 있어야합니다. (e_title) 및 송장 합계 (total_invoices)가 포함됩니다. 행은 인보이스 합계 (가장 큰 것부터), 성 (알파벳 순서), 이름 (알파벳순) 순으로 정렬되어야합니다. 송장 합계는 달러 기호 ($)로 시작해야하며 소수점 이하 두 자리 (반올림 됨)가 있어야합니다. 인보이스가없는 직원의 경우 NULL이 아닌 $ 0.00을 출력해야합니다. SQLite의 IFNULL, ROUND 및 PRINTF 함수를 살펴 보는 것이 유용 할 수 있습니다.
원하는 출력 :
내 쿼리 :
Select Employee.EmployeeId as e_id,
Employee.FirstName as e_first_name,
Employee.LastName as e_last_name,
Employee.Title as e_title,
'$' || printf("%.2f", Sum(Invoice.Total)) as total_invoices
From Invoice Inner Join Customer On Customer.CustomerId = Invoice.CustomerId
Inner Join Employee On Employee.EmployeeId = Customer.SupportRepId
Group by Employee.EmployeeId
Having Invoice.CustomerId in
(Select Customer.CustomerId From Customer
Where Customer.SupportRepId in
(Select Employee.EmployeeId From Employee Inner Join Customer On Employee.EmployeeId = Customer.SupportRepId)
)
order by sum(Invoice.Total) desc
내 출력 :
보시다시피, 처음 세 행은 정확하지만 직원에게는 인보이스가 없으므로 EmployeeID가 null이므로 이후 행이 인쇄되지 않습니다.
어떻게이 조건으로 행을 인쇄합니까? 시도해 보니 합쳐서과 ifnull이 작동하지만 작동하지 못합니다.
누군가 내 쿼리를 수정하여 일치하는 솔루션을 얻을 수 있다면 정말 고맙겠습니다. 감사합니다.
피.S : 이것은 종종 하위 쿼리를 사용하는 간단한 것을 어떻게
대단히 감사합니다. 그것은 일했다 :) – user3397557