Я сделал запрос, чтобы получить обзор всех «билетов», которые мы решили для клиентов в заказе на поставку. Я зарегистрировал 3 разных билета: 1 час рабочего времени, 2 часа рабочего времени и 4 часа рабочего времени. В моем обзоре я должен получить три билета красиво под друг друга, со временем работая над ним, так что 3 линии. По какой-то причине я получаю 6 линий друг под друга за 3 билета, поэтому по 2 за каждый билет. Первая - это сумма 1 и 2 рабочих часов, поэтому 3 часа, а вторая - 4 часа работы. Я только регистрировал эти моменты на отдельных билетах, но они добавляются ко всем билетам, и я не знаю, как это возможно. Я думаю, что это может иметь какое-то отношение к buyorderID?Результаты SQL удваиваются, когда они не должны
SELECT
po.PurchaseOrderId,
po.Reference AS PO,
po.CustomerPurchaseOrderId AS CustomerPurchaseOrderId,
po.BudgetPrice,
ti.subject,
ti.ticketid,
SUM(reg.DurationHours) AS DurationHours,
reg.IsOutOfHours,
CASE DATEPART(DW, reg.RegistrationDate) WHEN 7 THEN 1 ELSE 0 END AS IsSunday,
CASE
WHEN reg.IsOutOfHours = 1 AND CASE DATEPART(DW, reg.RegistrationDate) WHEN 7 THEN 1 ELSE 0 END = 1 THEN po2e.HourlyRate * 2
WHEN reg.IsOutOfHours = 1 AND CASE DATEPART(DW, reg.RegistrationDate) WHEN 7 THEN 1 ELSE 0 END = 0 THEN po2e.HourlyRate * 1.5
ELSE po2e.HourlyRate
END AS HourlyRate
FROM Registration reg
LEFT OUTER JOIN Employee emp ON reg.EmployeeId = emp.EmployeeId
LEFT OUTER JOIN PurchaseOrder po ON reg.PurchaseOrderId = po.PurchaseOrderId
LEFT
OUTER JOIN Ticket ti on ti.PurchaseOrderId=po.PurchaseOrderId
LEFT OUTER JOIN PurchaseOrder2Employee po2e ON po2e.EmployeeId = emp.EmployeeId AND po2e.PurchaseOrderId = po.PurchaseOrderId
WHERE po.PurchaseOrderId=1042
GROUP BY ti.subject, ti.ticketid, po2e.HourlyRate, po.PurchaseOrderId, po.Reference, po.BudgetPrice ,po.CustomerPurchaseOrderId,reg.IsOutOfHours, CASE DATEPART(DW, reg.RegistrationDate) WHEN 7 THEN 1 ELSE 0 END
order by po;
Возможный дубликат [не возвращено ни одного из строк, отличающихся по левому соединению] (http://stackoverflow.com/questions/35885169/returned-no-of-rows-different-on-left-join) – Backtrack
Если это произошло с меня. Я удаляю таблицу за таблицей, чтобы увидеть, что именно возвращает мне дубликаты, как только я нашел, что я сравниваю эту таблицу с этой таблицей. –
Легкий способ записи группы по операторам: Сделайте как можно больше case/datepart/etc в производной таблице. На верхнем уровне перечислите все столбцы в списке выбора (которые не являются аргументами для функции набора) в разделе group by - в том же порядке! – jarlh