2015-09-20 3 views
0

У меня есть код ниже, который содержит сумму того, где день «GRLastDt» завершен или не заполнен, однако я не учитывал дублированные идентификаторы возврата. Есть ли способ вернуть сумму за день для каждого идентификатора возврата?Sum by Distinct Values ​​

Например, день 24/5/15 может иметь 5 линий в день, у которых есть «X» в «Полном», однако 2 линии имеют дублированные идентификаторы возврата «RtnId», и поэтому общая сумма будет 4, а не 5 для 24/5/15.

SELECT 
    CONVERT(varchar(15), GRLastDt, 111) AS Date_, 
    SUM(CASE WHEN Complete = 'X' THEN 1 ELSE 0 END) AS Complete, 
    SUM(CASE WHEN Complete <> 'X' /*and RtnDt <>GRLastDt*/THEN 1 ELSE 0 END) AS Due 
FROM [dbo].[vw_AN_Admin_VendorReturns] 
WHERE (GRLastDt >= GETDATE() - 30) 
GROUP BY CONVERT(varchar(15), GRLastDt, 111),GRLastDt 
+0

Итак, вы хотите удалить повторяющиеся данные? или добавить идентификатор возврата в группу по набору результатов? –

+1

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

ответ

2

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

SUM(CASE WHEN Complete = 'X' THEN 1 ELSE 0 END) AS Complete, 

к этому:

COUNT(DISTINCT CASE WHEN Complete = 'X' THEN RtnId END) AS Complete, 

Вы, вероятно, хотите такое же изменение для Due расчета.

+1

Блестящий, спасибо – Krishn