2012-06-25 3 views
0

У меня есть эта хранимая процедура, которую я хочу использовать для моего отчета Crystal Crystal.Сохраненная процедура, которая не фильтрует, если переменная равна нулю

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), будут возвращены результаты всех номеров счетов.

Как это достичь?

Любая помощь приветствуется.

ответ

1

добавить в конце

or t3.AcctCode is null 
3

Это звучит, как вы хотите, чтобы последний пункт, чтобы эффективно опустить, если @Account равно нулю. Если это так, то попробуйте следующее:

... AND t0.Canceled = 'N' AND 
(@Account IS NULL OR t3.AcctCode = @Account) 
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) 
Смежные вопросы