2015-08-07 1 views
1

Я написал следующий SQL запрос, который предоставляет total количество дней на одного работника.MS SQL - сумма делиться на количество

SELECT DISTINCT 
    ([Entered_By]), 
    SUM(ALL DATEDIFF(DAY, Time_End_UTC, Date_Entered_UTC)) OVER (PARTITION BY entered_by) AS Days 

FROM [dbo].[Time_Entry] 
WHERE date_start BETWEEN '06-01-2015' AND '06-30-2015' 
AND DATEDIFF(DAY, Time_End_UTC, Date_Entered_UTC) > 2 

Я также могу изменить «sum» на «count» (и удалить «all») и получить общее количество записей.

Однако мне нужно одно из следующих действий:

  1. столбец с суммой, а другой со счетом (иметь в виду, что я не могу писать в эту базу данных) ИЛИ
  2. колонку с сумма, умноженная на счет

Когда я пытаюсь иметь и (option 1), я сталкиваюсь с проблемами. И я не могу понять, как это сделать: multiplication(option 2).

Благодарим за помощь.

+0

вам нужно разделить сумму Do по счету (как указано в вашем названии) или умножить (как указано в тексте)? –

ответ

0

Для варианта 2, вы можете просто

SELECT COUNT(ATTRIB) * SUM(ATTRIB) FROM TABLE; 
+0

Я пробовал это в своем исходном коде без успеха, но с другими комментариями, я получил его работу. Спасибо за ввод. – Brian

2

Я чувствую, что это было бы гораздо легче достичь с помощью GROUP BY запроса вместо оконного sum:

Select [Entered_By] 
,sum(datediff(Day, Time_End_UTC, Date_Entered_UTC)) 
,count(*) --count of all records in the group, which you could also multiply by the sum if you prefer option 2 

From [dbo].[Time_Entry] 
where date_start between '06-01-2015' and '06-30-2015' 
and datediff(DAY, Time_End_UTC, Date_Entered_UTC) >2 
GROUP BY [Entered_By] --this takes care of the distinctness of [Entered_By] and partitioning you had in your original query 
+0

Спасибо. Замечательно! Сначала я попытался это сделать, но должен был что-то испортить. Вы очень помогли - Еще раз спасибо. – Brian

+0

@Brian конечно вещь! Пожалуйста, подумайте о том, чтобы это отметить как принятый ответ. –

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