我有两个表的Oracle 11g:子查询返回多个行
表1:Account_Table
Account_Num | Serial_Num | Transaction_Date | Balance | Frequency
ACC1 001 Date1 0 f1
ACC1 002 Date2 1 f2
ACC1 003 Date3 2 f3
表-2:Bill_Table
Account_Num | Serial_Num | Version_Num | Bill_Date
ACC1 001 1 Date1 (say)
ACC1 002 1 Date2
ACC1 001 1 Date3
我需要通过加入Account_Num
和从Bill_Table
获得Bill_Date
两者都是Account_Table
和Bill_Table
的。
如果Bill_Table与Account_Num,Serial_Num有多个行匹配。这是ACC1, 001 of Account_Table
与两行ACC1, 001 of Bill_Table
相匹配的情况,那么我需要获取相应Account_Num,Serial_Num组合的最大版本号并返回该行的Bill_Date。
这是版本号是相同的两个ACC1,001组合的特殊情况,所以我需要获得TOP 1
(即ROWNUM = 1)
示例:Account_Table具有3行。现在我的输出应该
预期的结果:表
Account_Num | Serial_Num | Bill_Date
ACC1 001 Date
ACC1 002 Date
ACC1 003 null
查询,我已经试过是,
SELECT
A.ACCOUNT_NUM,
A.SERIAL_NUM,
B.BILL_DATE
FROM ACCOUNT_TABLE A, BILL_TABLE B WHERE
A.ACCOUNT_NUM = 'ACC1' AND
B.ACCOUNT_NUM = 'ACC1' AND
A.SERIAL_NUM = B.SERIAL_NUM AND
B.VERSION_NUM = (SELECT MAX (BIV.VERSION_NUM) FROM BILL_TABLE BIV
WHERE BIV.ACCOUNT_NUM = 'ACC1'
AND BIV.SERIAL_NUM = B.SERIAL_NUM
);
但这个查询结果不显示我的ACC1, 003
组合ACC1, 001
两次。
OUTPUT:
ACCOUNT_NUM | SERIAL_NUM | BILL_DATE
ACC1 001 Date
ACC1 001 Date
ACC2 002 Date
任何帮助将不胜感激。
P.S:我做错了的一件事是我只比较与序列号A.SERIAL_NUM = B.SERIAL_NUM
相匹配的行。但是,如果我删除这条线,那么我得到更多的行。
+1真棒。请给我一些时间来测试其他案件。我相信它会起作用。 – Amarnath
有趣! ROW_NUMBER()对我来说是新的,因为我上次在2010年使用了oracle。您有我的投票,Joachim。 :) –
Sry我的错误..其工作正常。 – Amarnath