有这样两张表:
Customer(客户信息表):
cid(客户编号)  cname(客户姓名)
   1              wlj
   2              yx
   3              zxfCusttype(客户类型表):
tid(类型编号) tname(类型名称) minamt(最低认购金额) maxamt(最高认购金额)
  1               A            10000                100000
  2               B            100000               1000000
  3               C            1000000              10000000Redmpurc(交易信息表):
seqno(交易号)  cid(客户编号)  applyamt(认购金额)
  RP001            1             1000
  RP002            2             346734
  RP003            3             87570000
  RP004            2             765000
  RP005            2             119000要求:
1、查询所有交易信息,并根据applyamt判断客户类型;
2、客户类型是根据认购金额的大小判断的(minamt<applyamt<=maxamt);
3、显示字段为:seqno  cid applyamt tname哪位大侠知道,有没有一种函数,可以在select时,判断其中的一个字段在另一表里属于哪个区间,然后根据区间,显示相应的类型名称?

解决方案 »

  1.   


    select a.seqno,a.cid,a.applyamt,
          (select tname from Custtype b where b.minamt < a.applyamt and applyamt <= b.maxamt) as tname
    from Redmpurc a
      

  2.   

    楼主是不是想要下面的结果:
    客户类型是根据认购金额的大小判断的(minamt<applyamt<=maxamt
    applyamt是根据客户编号分组后的sum值WITH  Custtype AS   
    ( SELECT  1 AS tid,  'A' AS tname, 10000 AS minamt, 100000 AS maxamt FROM dual UNION
      SELECT 2, 'B', 100000, 1000000 FROM dual UNION
      SELECT 3, 'C', 1000000, 10000000 FROM dual
    ),
    Redmpurc AS 
    (
      SELECT 'RP001' AS seqno, 1 AS cid, 1000 AS applyamt FROM dual UNION
      SELECT 'RP002', 2, 346734 FROM dual UNION
      SELECT 'RP003', 3 ,87570000 FROM dual UNION
      SELECT 'RP004', 2, 765000 FROM dual UNION
      SELECT 'RP005', 2, 119000 FROM dual )
      
    SELECT seqno, cid, applyamt, tname FROM (
    SELECT seqno,cid,applyamt, SUM(applyamt) OVER(PARTITION BY cid) AS sum_applyamt
      FROM Redmpurc) Redmpurc
    LEFT JOIN  Custtype
           ON sum_applyamt BETWEEN minamt AND maxamt运行结果:
    ------------------------
    RP001 1 1000
    RP002 2 346734 C
    RP005 2 119000 C
    RP004 2 765000 C
    RP003 3 87570000
      

  3.   

    不是sum值,这不是统计表,是明细表,呵呵,不过很感谢你,你这代码使用的CTE公共表达式把?
    我研究研究哈!
      

  4.   

    对了,Oracle有CTE公共表达式吗?