Microsoft报表生成器TSQL查询问题
我已经编写了以下TSQL查询,并正在Microsoft Report Builder中运行它。我的问题是一部分工作不正常。任何信息都会非常有用。谢谢 注意-从ufnARCUGetLatestProcessDate中选择ProcessDate返回运行查询的日期。这是我们的标准功能之一。 这是我遇到问题的部分。出于某种原因,它无法找到确实有空结束日期的贷款。例如,我正在测试的帐户有一笔未结贷款,但当我应该收到1时,它返回的值为0。有人看到我可能错过什么了吗Microsoft报表生成器TSQL查询问题,tsql,reporting-services,reportbuilder3.0,Tsql,Reporting Services,Reportbuilder3.0,我已经编写了以下TSQL查询,并正在Microsoft Report Builder中运行它。我的问题是一部分工作不正常。任何信息都会非常有用。谢谢 注意-从ufnARCUGetLatestProcessDate中选择ProcessDate返回运行查询的日期。这是我们的标准功能之一。 这是我遇到问题的部分。出于某种原因,它无法找到确实有空结束日期的贷款。例如,我正在测试的帐户有一笔未结贷款,但当我应该收到1时,它返回的值为0。有人看到我可能错过什么了吗 (SELECT COUNT(*)
(SELECT COUNT(*) -- Check if there are no open loans
FROM arcu.vwARCULoan AS L
WHERE A.ACCOUNTNUMBER=L.AccountNumber AND
L.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
L.LoanCloseDate IS NOT NULL)=0 AND -- END Check if there are no open loans
下面是整个查询
SELECT
A.ACCOUNTNUMBER AS 'Account Number'
,A.AccountBranch AS 'Branch Number'
,A.AccountOpenDate AS 'Account Open Date'
,A.AccountActivityDate AS 'Last Activity Date'
,N.NameFirst+' '+N.NameLast AS 'Member Name'
FROM
arcu.vwARCUAccount AS A
LEFT OUTER JOIN arcu.vwARCUName AS N
ON A.ACCOUNTNUMBER = N.AccountNumber
WHERE
A.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
A.AccountCloseDate IS NULL AND
A.AccountOpenDate>DATEADD(DAY,-30,A.AccountOpenDate) AND
N.NameType=0 AND
N.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
(SELECT SUM(S.ShareBalance) -- Check if all shares are zero
FROM arcu.vwARCUShare AS S
WHERE A.ACCOUNTNUMBER=S.AccountNumber AND
S.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
A.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()))=0 AND -- END Check if all shares are zero
(SELECT COUNT(*) -- Check if there are no open loans
FROM arcu.vwARCULoan AS L
WHERE A.ACCOUNTNUMBER=L.AccountNumber AND
L.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
A.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
L.LoanCloseDate IS NOT NULL)=0 AND -- END Check if there are no open loans
(SELECT COUNT(*) --Check if tracking records exist
FROM arcu.vwARCULoanTracking AS T
WHERE A.ACCOUNTNUMBER=T.AccountNumber AND
T.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
A.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
T.LoanTrackingType IN(@TRACKINGTYPES) )=0 AND --END Check if tracking records exist
(SELECT COUNT(*)
FROM arcu.vwARCUInventory AS I
WHERE A.ACCOUNTNUMBER=I.InventoryAccountNumber AND
I.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
A.ProcessDate = (SELECT ProcessDate FROM ufnARCUGetLatestProcessDate()) AND
I.InventoryStatus=2 AND
I.InventoryType IN (@INVENTORYTYPE))=0
ORDER BY A.ACCOUNTNUMBER
我假设如果贷款仍然有效,那么L.LoanClose将为空 在这种情况下,查询的问题是
L.LoanCloseDate IS NOT NULL
此标准意味着您只计算已结贷款,即LoanClosedDate中有值的贷款。你似乎需要的是相反的,即开放贷款。因此,您可能只需要将此标准更改为
L.LoanCloseDate IS NULL
因此,您正在计算未结贷款。您真的应该帮助我们,为您提供更多帮助。你的第一个代码片段是不可理解的,也不能运行,而第二个代码片段是巨大的。请先缩小问题范围,尝试创建一个新的解决方案。此外,如果您告诉我们您试图解决的问题以及遇到的问题,这会有所帮助。顺便说一句,我还将通过声明局部变量@ProcessDate并将其设置为对该函数的一次调用来替换您对ufnARCUGetLatestProcessDate函数的多次调用。然后将对该函数的其他调用替换为@ProcessDate。这将减少查询开销,并使代码更具可读性。