2016-03-10 3 views
0

Я сделал запрос, чтобы получить обзор всех «билетов», которые мы решили для клиентов в заказе на поставку. Я зарегистрировал 3 разных билета: 1 час рабочего времени, 2 часа рабочего времени и 4 часа рабочего времени. В моем обзоре я должен получить три билета красиво под друг друга, со временем работая над ним, так что 3 линии. По какой-то причине я получаю 6 линий друг под друга за 3 билета, поэтому по 2 за каждый билет. Первая - это сумма 1 и 2 рабочих часов, поэтому 3 часа, а вторая - 4 часа работы. Я только регистрировал эти моменты на отдельных билетах, но они добавляются ко всем билетам, и я не знаю, как это возможно. Я думаю, что это может иметь какое-то отношение к buyorderID?Результаты SQL удваиваются, когда они не должны

Result

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; 

Keys

Registrations

+0

Возможный дубликат [не возвращено ни одного из строк, отличающихся по левому соединению] (http://stackoverflow.com/questions/35885169/returned-no-of-rows-different-on-left-join) – Backtrack

+0

Если это произошло с меня. Я удаляю таблицу за таблицей, чтобы увидеть, что именно возвращает мне дубликаты, как только я нашел, что я сравниваю эту таблицу с этой таблицей. –

+0

Легкий способ записи группы по операторам: Сделайте как можно больше case/datepart/etc в производной таблице. На верхнем уровне перечислите все столбцы в списке выбора (которые не являются аргументами для функции набора) в разделе group by - в том же порядке! – jarlh

ответ

1

Я думаю, что это reg.isOutOfHours, что вызывает проблему, попытайтесь брать, что из избранных и GroupBy, чтобы увидеть, если это делает разница.

+0

Он действительно дает мне всего 3 строки, но он все еще рекламирует часы из отдельных билетов вместе. Итак, теперь он дает мне 3 раза 7 часов вместо 1,2 и 4 часа? –

+0

Я почти уверен, что SUM происходит для PurchaseOrderID, а не TicketID, я попробую здесь, но попробую вынуть PurchaseOrderID из Select, я немного вернусь к вам. – Coesy

+0

Да, это не помогает:/Он просто удаляет столбец. –

Смежные вопросы