我有一个工作程序来显示给定范围的期间的报告。 以下PROC认定为给定时间段的所有预订,并显示每个月份组有条件当使用分组时
CREATE PROCEDURE [dbo].[GetSummaryOverviewReport] (
@StartDate SMALLDATETIME = NULL
,@EndDate SMALLDATETIME = NULL
,@IncludeVAT BIT = 0
,@AddedAfter SMALLDATETIME
,@HasObservation BIT = 0
,@IncludeCancelledBooking BIT = 0
)
AS
BEGIN
SET NOCOUNT ON
BEGIN
SELECT YEAR(StartTime) [Year]
,MONTH(StartTime) [Month]
,COUNT(BookingId) [BookingCount]
,SUM(CASE
WHEN IsVAT = 1
AND @IncludeVAT = 1
THEN (Price/100) * 80
ELSE Price
END) AS TotalPrice
,PaidCount = sum(CASE
WHEN B.PaymentStatus = 'FullyPaid'
THEN 1
ELSE 0
END)
,PaidSum = sum(CASE
WHEN B.PaymentStatus = 'FullyPaid'
THEN (
CASE
WHEN IsVAT = 1
AND @IncludeVAT = 1
THEN (Price/100) * 80
ELSE Price
END
)
ELSE 0
END)
,C.CategoryId
,CategoryName
FROM Category c
LEFT JOIN Booking B ON C.CategoryId = B.CategoryId
WHERE B.AddedDateTime > @AddedAfter
AND ISNULL(B.IsCancelled, 0) = 0
AND (
(
B.StartTime BETWEEN @StartDate
AND @EndDate
)
OR (
B.StartTime BETWEEN @StartDate
AND @EndDate
)
)
AND (
@HasObservation = 0
OR B.PatientID IN (
SELECT PatientID
FROM PatientXObservation O
WHERE ObservationId IN (
1
,2
,4
)
)
)
GROUP BY YEAR(StartTime)
,MONTH(StartTime)
,C.CategoryId
,CategoryName
ORDER BY 1
,2
,CategoryName
END
END
现在,我们要添加@IncludeCancelledBooking参数过滤。因此用户可以选择是否显示取消预订。截至目前该程序忽略取消预订,并只显示未取消预订..
我无法找到如何添加此条件,而分组记录。 我需要使用AND AND ISNULL(B.IsCancelled,0)= 0基于@IncludeCancelledBooking
'OR Booking ISNULL(B.IsCancelled,0)= 0' in this'Booking' is alias?我看不出它会如何工作。无论如何,我会尝试改变proc并让你知道。谢谢! – Developer
它为我工作。 'AND(@IncludeCancelledBooking <> 0 or ISNULL(B.IsCancelled,0)= 0)' – Developer