【发布时间】:2014-02-04 17:11:59
【问题描述】:
好的,所以我有一个查询返回的行数比预期的重复数据多。这是我的查询:
SELECT AP.RECEIPTNUMBER
,AP.FOLDERRSN
,ABS(AP.PAYMENTAMOUNT)
,ABS(AP.PAYMENTAMOUNT - AP.AMOUNTAPPLIED)
,TO_CHAR(AP.PAYMENTDATE,'MM/DD/YYYY')
,F.REFERENCEFILE
,F.FOLDERTYPE
,VS.SUBDESC
,P.NAMEFIRST||' '||P.NAMELAST
,P.ORGANIZATIONNAME
,VAF.FEEDESC
,VAF.GLACCOUNTNUMBER
FROM ACCOUNTPAYMENT AP
INNER JOIN FOLDER F ON AP.FOLDERRSN = F.FOLDERRSN
INNER JOIN VALIDSUB VS ON F.SUBCODE = VS.SUBCODE
INNER JOIN FOLDERPEOPLE FP ON FP.FOLDERRSN = F.FOLDERRSN
INNER JOIN PEOPLE P ON FP.PEOPLERSN = P.PEOPLERSN
INNER JOIN ACCOUNTBILLFEE ABF ON F.FOLDERRSN = ABF.FOLDERRSN
INNER JOIN VALIDACCOUNTFEE VAF ON ABF.FEECODE = VAF.FEECODE
WHERE AP.NSFFLAG = 'Y'
AND F.FOLDERTYPE IN ('405B','405O')
在我添加底部的两个内连接之前一切正常。我基本上是想获得所有有 NSF 的付款。当我运行简单查询时:
SELECT *
FROM ACCOUNTPAYMENT
WHERE NSFFLAG = 'Y'
我只有 3 行与 405B 和 405O 文件夹有关。所以我只希望在上面的查询中返回 3 行,但我得到 9 行,其中信息在某些列中重复。我需要基于有效账户费用和账户账单费用表中的费用代码的确切 feedesc 和 gl 帐号。
我无法发布我的输出图片。
注意:当我在没有两个底部连接的情况下运行查询时,我得到了预期的输出。
有人可以帮助我提高查询效率吗?谢谢!
根据要求,以下是我的查询为 vaf.feedesc 和 vaf.glaccountnumber 列返回的结果:
Boiler Operator License Fee 2423809
Boiler Certificate of Operation without Manway - Revolving 2423813
Installers (Boiler License)/API Exam 2423807
Boiler Public Inspection/Certification (State or Insurance) 2423816
Boiler Certificate of Operation with Manway 2423801
Boiler Certificate of Operation without Manway 2423801
Boiler Certificate of Operation with Manway - Revolving 2423813
BPV Owner/User Program Fee 2423801
Installers (Boiler License)/API Exam Renewal 2423807
【问题讨论】:
-
使用
DISTINCT解释here 来获得不同的行。至于为什么结果中有多行,您必须查看最后两个表的所有列的值。您可能缺少另一个过滤条件。 -
“注意:当我在没有两个底部连接的情况下运行查询时,我会得到预期的输出。” 然后不要使用这两个连接。
-
谢谢,但使用 DISTINCT 并不能帮助我处理多行(如您所述)我应该在最后两个表中所有列的值中查找什么?
-
@DEwok 只需选择最后 2 个表的所有列并检查行的输出以查看值变化的地方。这将让您知道为什么前面表格的每个结果都是
JOINing以及其他表格的多行。 -
@user2989408 是对的。如果不了解有关
ACCOUNTBILLFEE和VALIDACCOUNTFEE表的更多信息(列和行),我们无法完全回答您的问题。但你的问题肯定存在。
标签: sql sql-server join