Я ищу способ создания запроса для обработки следующего сценария.У меня есть офисная база данных, база данных сотрудников с идентификатором и таблица базы данных с накладными продаж.Мне нужно возвращать запись для каждого сотрудника за каждый год с да или нет (1 или 0), если у человека был счет в этом году и номер офиса счета.
Мне нужно один раз отображать номер офиса для каждого сотрудника, указав год и показатель для каждого года, в котором был выставлен счет.Сотрудники могут находиться в нескольких офисах.
Office Employee Employee Name Year1 Year2 Year3 Year4 Year5
12345 E5681718 Jane Smith 1 1 0 0 1
54321 E5681718 Jane Smith 1 0 0 1 0
Я пробовал несколько разных вещей, но ни одна из них не работает.Я новичок в SQL, поэтому рассуждения о том, что я делаю, могут вообще не иметь смысла.Я пытался использовать
;WITH
Employees AS (SELECT DISTINCT employeeID, OfficeNumber
FROM dbo.Employee
WHERE OfficeNumber IN ('12345', '78901', '54321')
AND employeeID IS NOT NULL
AND employeeID <> ' ')
, Invoices AS (
SELECT employeeID
CASE WHEN COUNT(*) > '0' AND i.adddate >= '2019-01-01' THEN '1' else
'0' END AS Inv2019 ,
CASE WHEN COUNT(*) > '0' AND i.adddate BETWEEN '2018-01-01' AND '2019-
01-01' THEN '1' else '0' END AS Inv2018 ,
CASE WHEN COUNT(*) > '0' AND i.adddate BETWEEN '2017-01-01' AND '2018-
01-01' THEN '1' else '0' END AS Inv2017 ,
CASE WHEN COUNT(*) > '0' AND i.adddate BETWEEN '2016-01-01' AND '2017-
01-01' THEN '1' else '0' END AS Inv2016,
FROM Invoices i
WHERE employeeID IS NOT NULL
AND employeeID <> ' '
GROUP BY employeeID , AddDate)
SELECT e.OfficeNumber, e.employeeID, iv.Inv2018, iv.Inv2017, iv.Inv2016
LEFT OUTER JOIN Invoices iv ON p.PreparerID = pr.PreparerID
GROUP BY e.OfficeNumber, iv.employeeID, iv.Inv2018, iv.Inv2017, iv.Inv2016
Также пытался тянуть за каждый год, используя 'Имея'
;WITH
Employees AS (SELECT DISTINCT employeeID, OfficeNumber
FROM dbo.Employee
WHERE OfficeNumber IN ('12345', '78901', '54321')
AND employeeID IS NOT NULL
AND employeeID <> ' ')
,Inv19 AS (SELECT DISTINCT employeeID, OfficeNumber , YEAR(adddate) Inv19
FROM Invoices i
WHERE adddate BETWEEN '2019-01-01' AND GETDATE()
AND employeeID IS NOT NULL
AND employeeID <> ' '
GROUP BY employeeID, OfficeNumber, AddDate
HAVING COUNT(*) > '0')
,Inv18 AS (SELECT DISTINCT employeeID, OfficeNumber , YEAR(adddate) Inv18
FROM Invoices i
WHERE adddate BETWEEN adddate BETWEEN '2018-01-01' AND '2019-01-01'
AND employeeID IS NOT NULL
AND employeeID<> ' '
GROUP BY employeeID, OfficeNumber, AddDate
HAVING COUNT(*) > '0'
)
,Inv17 AS (SELECT DISTINCT employeeID, OfficeNumber , YEAR(adddate) Inv17
FROM Invoices i
WHERE adddate BETWEEN '2017-01-01' AND '2018-01-01'
AND employeeID IS NOT NULL
AND employeeID<> ' '
GROUP BY employeeID, OfficeNumber, AddDate
HAVING COUNT(*) > '0'
)
Select e.employeeID, e.OfficeNumber , Inv19, Inv18, Inv17
from Employees e
Left outer join Inv19 i9 on e.employeeID = i9.employeeID
Left outer join Inv18 i8 on e.employeeID = i8.employeeID
Left outer join Inv17 i7 on e.employeeID = i7.employeeID
Это была моя последняя попытка, но я получаю несколько строк на сотрудника, даже когда этоэто тот же офис.