私は合計をもたらすSPとUDFを持っています。しかし、私は、COUNT CASE WHEN
クエリが1回で合計を得ることが可能であることを知っています。この点で誰も助けてくれますか?私の現在のクエリは単なる冗長な休止です。これを実行するためのより高速なSQLクエリー
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
よろしく。