У меня есть SP и UDF, которые приносят мне итоги.Но я знаю, что существует запрос COUNT CASE WHEN
, позволяющий получить итоги за один раз.Может ли кто-нибудь помочь мне в этом отношении?Мой текущий запрос - просто избыточная пауза.
ALTER PROCEDURE [dbo].[GetMailBasketsForLocums]
AS
BEGIN
SET NOCOUNT ON;
SET FMTONLY OFF;
SET DATEFORMAT DMY;
SELECT DISTINCT Locum.OID,
Locum.FirstName + ' ' + Locum.LastName AS Name,
dbo.GetMailBasketTotalsForLocums(MailBasket.LocumId, 1) AS BookingsConfirmed,
dbo.GetMailBasketTotalsForLocums(MailBasket.LocumId, 3) AS BookingsCancelled,
dbo.GetMailBasketTotalsForLocums(MailBasket.LocumId, 5) AS BookingsSwitched,
(dbo.GetMailBasketTotalsForLocums(MailBasket.LocumId, 1) +
dbo.GetMailBasketTotalsForLocums(MailBasket.LocumId, 3) +
dbo.GetMailBasketTotalsForLocums(MailBasket.LocumId, 5)) AS Total
FROM MailBasket INNER JOIN
Locum
ON Locum.OID = MailBasket.LocumID
WHERE MailBasket.IsSent = 0
AND MailBasket.MailTypeID IN (1, 3, 5);
END
И
ALTER FUNCTION [dbo].[GetMailBasketTotalsForLocums]
(
@LocumID BIGINT,
@MailTypeID INT
)
RETURNS int
AS
BEGIN
DECLARE @Result int
SELECT @Result = COUNT(MailBasket.OID)
FROM MailBasket
WHERE MailBasket.MailTypeID = @MailTypeID
AND MailBasket.LocumID = @LocumID
AND MailBasket.IsSent = 0;
RETURN @Result
END
С уважением.