2015-09-24 5 views
0

Контекст: Это для гипотетической компании по прокату автомобилей. Этот вопрос касается двух таблиц. Они называются «Таблица персонала» и «Таблица сотрудников сотрудников по продажам». Первая таблица включает информацию о таких сотрудниках, как DOB и еще много чего. Вторая таблица содержит следующую информацию:MS Access SQL: не включать в число

enter image description here

Staff_ID = Уникальный код сотрудника Sale_ID = Уникальный код конкретного Сейла SaleStaffMember_AssociatedWithPurchase =, был ли сотрудник связан с первоначальной продажей или просто возвращение автомобиля.

Две таблицы имеют одинаковый Staff_ID.

Я написал следующий SQL:

SELECT [staff table].staff_id as [Staff ID], Count([sale staff member table].staff_id) AS [Number of Rentals] 
FROM [staff table] 
LEFT JOIN [sale staff member table] ON [sale staff member table].staff_id = [staff table].staff_id 
WHERE [sale staff member table].staff_id IS NULL or [sale staff member table].staff_id IS NOT NULL 
GROUP BY [staff table].staff_id 

Что это делает, что он перечисляет каждый сотрудник (некоторые сотрудники не сделали никаких продаж и, следовательно, не в таблице сотрудника продажи) и рядом их он перечисляет сумму продаж они составили:

enter image description here

Моя проблема заключается в том, что сотрудник указал здесь технически не сделал каких-либо продаж, однако он внесен в список, сделав 1, когда он должен иметь 0 , Я понимаю, почему, поскольку я ничего не писал о связанном с полем покупки в SQL. Я попытался сделать это, и, насколько я мог бы получить, это было полное удаление этого элемента из результата запроса. Тем не менее, то, что я хочу сделать, это в основном говорит:

«Если сотрудник не связан с покупкой, не включает в себя эту конкретную запись в графе»

Но я понятия не имею, как это сделать , Я попробовал несколько смешных решений и посмотрел на это, но в конечном итоге я не смог найти решение. Я уверен, что это относительно просто, но за последние несколько дней я только что выбрал SQL, поэтому пока не знаю.

Edit: Просто понял, что я где заявление буквально ничего не делает, ха-ха, но это ничего не решает, он просто делает код немного аккуратнее:

мой пересмотренный код:

SELECT [staff table].staff_id as [Staff ID], Count([sale staff member table].staff_id) AS [Number of Rentals] 
FROM [staff table] 
LEFT JOIN [sale staff member table] ON [sale staff member table].staff_id = [staff table].staff_id 
GROUP BY [staff table].staff_id 

Спасибо!

Edit: окончательный ответ

SELECT [Staff Table].Staff_ID AS [Staff ID], SSM.[Number of Rentals] AS [Number of Rentals] 
FROM [staff table] 
LEFT JOIN (SELECT Staff_ID, nz(COUNT(Staff_ID),0) as [Number of Rentals] 
FROM [Sale Staff Member Table] 
WHERE SaleStaffMember_AssociatedWithPurchase = 1 
GROUP BY Staff_ID) AS SSM 
ON [Staff Table].Staff_ID = SSM.Staff_ID 

ответ

1

Насколько я понимаю вашу проблему, если вы просто ищете сотрудников с соответствующей покупкой, то вы можете просто сделать этот запрос:

SELECT s.staff_id AS [Staff Id], COALESCE(ssm.NoOfRentals,0) AS [Number of Rentals] 
FROM [staff table] AS s 
LEFT JOIN (SELECT staff_id, COUNT(staff_id) as NoOfRentals 
FROM [sale staff member table] 
WHERE SaleStaffMember_AssociatedWithPurchase = 1 
GROUP BY staff_id) AS ssm 
ON s.staff_id = ssm.staff_id 

пожалуйста, поправьте меня, если я ошибаюсь.

+0

Этот запрос вернет всех сотрудников, которые произвели продажи и количество произведенных ими продаж; однако, я хочу, это запрос, который показывает ВСЕ сотрудников и продажи, которые они сделали, даже если они должны быть 0. – BlueRhapsody

+0

Я должен еще раз указать, что запрос, который у меня выше, показывает каждого сотрудника и их счет продажи, даже если оно равно 0, но одна проблема заключается в том, что он показывает, что сотрудник S000000976 совершил продажу, даже если он не был связан с покупкой. Я хочу, чтобы запрос не учитывал, где появляется идентификатор, если сотрудник не связан с покупкой. – BlueRhapsody

+0

Пожалуйста, проверьте отредактированный запрос, если он может решить вашу проблему. – DeathWish

0

Добавить поле в вашем начальное что-то вроде запроса

Sales:sum (iif(SaleStaffMember_AssociatedWithPurchase = 1,1,0)) 

Это оставит каждый сотрудник в результате и суммировать количество продаж они связаны.