0
我正在研究下面這個SQL函數,但不知道如何使代碼條件WHERE基於標誌(@PastDueFlag,0或1傳遞) 。MS SQL函數 - 查詢條件參數變化輸入
請假定該函數中的整個查詢工作正常。我喜歡改變的唯一線條正好在WHERE 1 = 1「AND DATEDIFF(」d「,InvoiceDueDate,GETDATE())> 0」之下。
當參數@PastDueFlag = 1時,我喜歡在查詢中包含這個條件,否則不要在WHERE查詢中包含此行。
有沒有辦法做到這一點?
感謝,
ALTER FUNCTION [dbo].[TotalARDueByCompanyID]
(
-- Add the parameters for the function here
@CompanyID AS INTEGER,
@PastDueFlag AS INTEGER
)
RETURNS Float
AS
BEGIN
DECLARE @TotalARDue AS Float
SET @TotalARDue = (
SELECT SUM(CAST(GrandTotal AS NUMERIC(9,2)) + CAST(ISNULL(LinkedTxnAmount, 0) AS NUMERIC(9,2))) AS TotalARDue
FROM (
select i.OrderID, InvoiceID, cp.CustomerPO, o.CompanyID, i.CreditMemo
, CONVERT(VARCHAR(10),(InvoiceDate + (SELECT TermDays FROM dbo.ERP_CompanyTerms WHERE TermID = i.TermID)), 101) AS InvoiceDueDate
, (isnull(FreightCost,0) + isnull(TaxState,0) + isnull(TaxCounty, 0) + isnull(TaxCity, 0))
+
(SELECT SUM(ExtQty * UnitSell) FROM ERP_InvoiceDetail WHERE invoiceID = i.InvoiceID) as GrandTotal
--, isnull(i.FreightCost, 0) as FreightCost, i.ShipVia, i.WhoPays, i.Status
, CONVERT(VARCHAR(10), i.CreatedDate, 101) AS CreatedDate
, CONVERT(VARCHAR(10), i.InvoiceDate, 101) AS InvoiceDate
, (select Name from ERP_Company c where c.CompanyID = o.CompanyID) as CompanyName
, (select first_name + ' ' + last_name from employee where tech_id = i.createdBy) as CreatedBy
, (SELECT em2.first_name + ' ' + em2.last_name) AS SalesRep
, (SELECT em2.tech_id) AS SalesRepID
, o.SOTypeInt AS SOType, em2.WH_RegionID AS Region, i.Status, qv.SFOppt
, (
SELECT
(SELECT CASE
WHEN CreditMemo = 1 THEN
SUM(qi.LinkedTxnAmount) * -1
ELSE
SUM(qi.LinkedTxnAmount)
END
)
FROM dbo.ERP_Invoice i2
LEFT JOIN dbo.QuickBooks_InvoiceLinked qi ON RefNumber = CAST(i2.InvoiceID AS VARCHAR(8))
WHERE 1 = 1
AND InvoiceID = i.invoiceID -- 305763, 304990
AND LinkedTxnTxnType <>
CASE
WHEN i2.CreditMemo = 1 THEN
'CreditMemo'
ELSE
''
END
GROUP BY CreditMemo
) AS LinkedTxnAmount
from ERP_Invoice i
LEFT JOIN ERP_Order o on o.OrderID = i.OrderID
INNER JOIN ERP_Company c on o.CompanyID = c.CompanyID
LEFT JOIN Employee em on em.Tech_ID = i.CreatedBy
LEFT JOIN Employee em2 ON em2.Tech_ID = o.SalesPersonID
LEFT JOIN ERP_QuoteVer qv ON qv.QuoteVerID = o.QuoteVerID
LEFT JOIN dbo.ERP_CustomerPO cp ON cp.CustomerPOID = i.CustomerPOID
where 1 = 1
) a
WHERE
1 = 1
AND DATEDIFF("d", InvoiceDueDate, GETDATE()) > 0
AND CAST(GrandTotal AS NUMERIC(9,2)) + CAST(ISNULL(LinkedTxnAmount, 0) AS numeric(9,2)) > 0
AND CompanyID = @CompanyID
AND Status in ('New', 'Completed')
AND SOType = 'Production'
)
-- Return the result of the function
RETURN @TotalARDue
END
這很完美!謝謝! – Milacay 2013-02-11 21:52:31