Я вполне уверен, что могу использовать оператор CASE в этом случае, но я явно не смотрю на это право.
В моем предложении WHERE, когда метка даты находится в июле,Мне нужно сгруппировать и включить их в результаты за август. Вот то, что я пытаюсь, но мне не хватает отметки:
and CPTrn_DateTime = case
when datepart(month, CPTrn_DateTime) = 7 then datepart(month, CPTrn_DateTime) in (7,8)
Причина, по которой я пытался использовать оператор CASE, заключается в том, что только в июле месяценужно, чтобы эти результаты были связаны с результатами августа. Причина, по которой я не могу сделать простой диапазон дат, заключается в том, что мне нужно, чтобы логика работала для всех дат, движущихся вперед с течением времени.
Вот весь запрос:
DECLARE @month INT
SET @month = 8
SELECT DISTINCT cp.CPTrn_Key
,ch.Chg_Ref_No
,c.Cust_Alias
,ch.Chg_Total_Units
,ch.Chg_Amount
,cp.CPTrn_DateTime
FROM PDICompany_2049_01..CP_Transactions cp(NOLOCK)
INNER JOIN PDICompany_2049_01..Customers c(NOLOCK) ON CPTrn_Cust_Key = Cust_Key
INNER JOIN PDICompany_2049_01..Products p(NOLOCK) ON cp.CPTrn_Prod_Key = Prod_Key
LEFT JOIN PDICompany_2049_01..CP_Billing_Details CPBD(NOLOCK) ON CPBd.CPBillDtl_CPTrn_Key = cp.CPTrn_Key
AND CPTrn_Cust_Key = CPBD.CPBillDtl_Cust_Key
AND CPBD.CPBillDtl_Rec_Type = 1
LEFT JOIN PDICompany_2049_01..Customer_Locations cl(NOLOCK) ON c.Cust_WhPrcNtc_Def_CustLoc_Key = cl.CustLoc_Key
AND ((CustLoc_Type & 2) <> 0)
LEFT JOIN Charges ch ON ch.Chg_Ref_No = cpbd.CPBillDtl_Invoice_No
WHERE cp.CPTrn_Tran_Type != 0
AND c.Cust_Alias = 'MONTGOMERY CRANES, LLC'
AND CPBillDtl_Invoice_No IS NOT NULL
AND CPTrn_DateTime = CASE
WHEN datepart(month, CPTrn_DateTime) = 7
THEN datepart(month, CPTrn_DateTime) IN (7,8)
ELSE datepart(month, CPTrn_DateTime) = @month
END AS 'CPTrn_DateTime'
ORDER BY 1