欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

碰到难题,求高手写一句sql

更新时间: 2014-01-05 02:10:56 责任编辑: Author_N1

 

遇到难题,求高手写一句SQL
现在有2张表,一张表记录了客户信息(客户ID,客户名),另一张表记录了这个客户和发放给他贷款的银行(客户,贷款发放行,贷款额度)。
求列出每个客户对应的提供给该客户最大贷款额度的银行?
比如:

客户表:
1 小明
2 小芳

客户贷款信息
1 100万 农行
1 200万 中国银行
2 150万 建设银行
2 200万 农行


求出的结果应该为
客户ID 客户名 贷款发放额度最大行
1 小明 中国银行
2 小芳 农行


求高手指点,用ORACLE应该怎么写这个SQL啊?


--参考方法--
引用:
这个问题还有个加强版。

就是如果遇到贷款额度相同的贷款发放行,按照升序取排在最前面的行。

客户表:
客户ID, 客户名
1 小明
2 小芳

客户贷款信息
客户ID, 贷款金额  发贷银行
1 100万 农行
1 200万 中国银行
1 200万 建设银行
2 150万 建设银行
2 200万 农行

有没有高手帮忙看看啊?


这个是典型的,前“N”个查询,按照个人编号进行分组,查询该人的信息,使用常规的SQL来写是比较麻烦的,Oracle在8i以上提供分析函数其目的之一就是为了解决前N个查询的问题。

建立测试数据


/*
CREATE TABLE CUSTOM(
    CUSTOMID NUMBER(20),
    NAME VARCHAR2(40)
)
;
CREATE TABLE LMSG(
    CUSTOMID NUMBER(20),
    CREDIT NUMBER(20),
    BANKNAME VARCHAR2(40)
)
;
INSERT INTO CUSTOM VALUES(1,'小明');
INSERT INTO CUSTOM VALUES(2,'小芳');
INSERT INTO LMSG VALUES(1,100,'农行');
INSERT INTO LMSG VALUES(1,200,'中国银行');
INSERT INTO LMSG VALUES(1,200,'建设银行');
INSERT INTO LMSG VALUES(2,150,'建设银行');
INSERT INTO LMSG VALUES(2,200,'农行');
*/




SELECT  CUSTOMID,NAME,CREDIT,BANKNAME FROM
(SELECT ROW_NUMBER() OVER(PARTITION BY A.CUSTOMID ORDER BY B.CREDIT DESC, BANKNAME) RN,
       A.CUSTOMID,A.NAME,B.CREDIT,B.BANKNAME
  FROM CUSTOM A, LMSG B
 WHERE A.CUSTOMID = B.CUSTOMID) 
 WHERE RN=1;

结果为:
CUSTOMID NAME CREDIT BANKNAME
1 小明 200 建设银行
2 小芳 200 农行
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:10:56
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6655/
本文WWW.DOC100.NET DOC100.NET版权所有。