我有这个存储过程,我想用于我的SAP水晶报告。
SELECT
t0.DocNum AS ReceiptNo, t2.DocEntry AS InvoiceNo,
t0.DocDate, t1.CheckAct,
t1.CheckNum, t3.AcctName,
CASE
WHEN (t0.CardName IS NULL) THEN t0.Address
ELSE t0.CardName
END AS CustName,
CASE
WHEN ((t1.CheckNum IS NULL OR t1.CheckNum = 0)
AND t0.TrsfrRef IS NULL) THEN 'Cash'
WHEN (t1.CheckNum > 0
AND t0.TrsfrRef IS NULL) THEN 'Cheque'
ELSE 'Transfer'
END AS PayType,
CASE
WHEN (t1.CheckNum > 0 AND t0.TrsfrRef IS NULL) THEN t1.CheckSum
ELSE t0.DocTotal
END AS DocTotal
FROM
ORCT t0
LEFT OUTER JOIN
RCT1 t1 ON t1.docnum = t0.docnum
LEFT OUTER JOIN
RCT2 t2 ON t0.DocEntry = t2.DocNum
LEFT OUTER JOIN
OACT t3 ON t1.CheckAct = t3.AcctCode
WHERE
t0.DocDate BETWEEN @BeginDate AND @EndDate
AND t0.Canceled = 'N'
AND t3.AcctCode = @Account
在最后一行,我已声明一个变量@Account
,可按帐号过滤结果。我希望我的报告能够工作,如果未选择帐户(null),则返回所有帐号的结果。
我如何实现这一目标?
任何帮助表示感谢。
答案 0 :(得分:3)
如果@Account
为空,听起来您希望有效地省略最后一个子句。如果是这样,那么试试这个:
... AND t0.Canceled = 'N' AND
(@Account IS NULL OR t3.AcctCode = @Account)
答案 1 :(得分:1)
添加到最后
or t3.AcctCode is null
答案 2 :(得分:1)
您可以使用IF ELSE
例如
IF @Account IS NULL
BEGIN
--Your Query without "AND t3.AcctCode = @Account"
END
ELSE
BEGIN
-- Your Query
END
您还可以将最后一行更改为:
AND (t3.AcctCode = @Account OR @Account IS NULL)