Как суммировать несколько возвратов с условием?

Мой сценарий:

USE Cars

DECLARE @TotalMoneyForService money; 
DECLARE @CurrentDate date; 
DECLARE @DateCompleted date;

SET @CurrentDate = GETDATE();

SET @DateCompleted = (SELECT DateCompleted 
 FROM ServiceType 
 WHERE DateCompleted = @CurrentDate);

SET @TotalMoneyForService = (SELECT SUM(Price) 
 FROM ServiceType 
 WHERE DateCompleted = @CurrentDate);

PRINT @CurrentDate; 
IF @TotalMoneyForService > 0 AND @DateCompleted = @CurrentDate 
 PRINT 'Today Total Car Maintenance is $' + 
 CONVERT(varchar,@TotalMoneyForService,1); 
ELSE 
 PRINT 'No Car Expense Maintenance Today' ;

1 CASE OUTPUT:

2014-04-12
Today Total Car Maintenance is $43.00

2 CASE OUTPUT: У меня проблема, если вы говорите в поле DateCompleted, у меня будет две ячейки с одинаковой датой, скажем, 2014-04-12. У меня будет результат:

Msg 512, уровень 16, состояние 1, строка 9 Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется как выражение. 2014-04-12 Нет обслуживания автомобилей сегодня

Я хочу получить сумму полей Price, если DateCompleted = текущая дата, поэтому во втором случае это должно быть 53.00. Я понимаю, что у меня есть несколько возвратов, и мой @DateCompleted содержит два результата, например массив? Я немного путаюсь, если кто-нибудь может вести меня и говорить мне, что я делаю неправильно, я бы очень признателен. Спасибо за ваше время.

2 ответа

изменить эту строку кода

SET @DateCompleted = (SELECT top 1 DateCompleted 
 FROM ServiceType 
 WHERE DateCompleted = @CurrentDate);


Можешь попробовать:

DECLARE @TotalMoneyForService money; 
DECLARE @CurrentDate date; 
DECLARE @DateCompleted date;

SET @CurrentDate = CONVERT(DATETIME,CONVERT(VARCHAR(12), GETDATE()));

;with TotMaint
AS
(
SELECT
 SUM(Price) AS Price
FROM
 ServiceType
where
 CONVERT(DATETIME,CONVERT(VARCHAR(12), DateCompleted)) = @CurrentDate
)
select 
 case when Price is null THEN 'No Car Expense Maintenance Today'
 else 'Today Total Car Maintenance is $' + convert(varchar(10), Price)
 end as [Answer]
from
 TotMaint

licensed under cc by-sa 3.0 with attribution.