我有一个SP和UDF带给我总计。但我知道有一个COUNT CASE WHEN
查询可能在一次去总计。任何人都可以在这方面帮助我吗?我目前的查询只是一个冗余暂停。一个更快的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
问候。