各位:请帮忙考虑下下面情况的SQL如何写。谢谢!table1:
MMSNO,RNCNO,BTSNO,SECTNO,DATA1table2:
MMSNO,RNCNO,BTSNO,SECTNO,DATA2其中MMSNO,RNCNO,BTSNO,SECTNO为key。table1和table2可以通过MMSNO,RNCNO,BTSNO建立关联MMSNO,RNCNO,BTSNO的key组合,数据可以单独存在table或者table2中。也可以同时存在于这2个表中。要找出MMSNO/RNNO/BTSNOkey组合的DATA1/DATA2中的最大值。

解决方案 »

  1.   

    with t as (
    select key,DATA1 as datas from table 
    union 
    select key,DATA2 as datas from table2)
    select key,max(datas) from t group by key
      

  2.   


    select MMSNO,RNCNO,BTSNO,max(DATA1),max(DATA2)
      from
      ( select MMSNO,RNCNO,BTSNO,DATA1,0 DATA2 from table1
        union all
        select MMSNO,RNCNO,BTSNO,0,      DATA2 from table2
       )
     group by MMSNO,RNCNO,BTSNO;
      

  3.   

    多个数据集一般用union 和union all连成一个数据集来处理,实际上就是
    集合运算中取并集
    当然,使用时两个数据集要有相同的列数
    union连接去重,union all不去重(在不需要去重的地方推荐使用,
    一般效率高于union)
      

  4.   

    用full join呀
    select nvl(t1.MMSNO, t2.MMSNO),nvl(t1.RNCNO,t2.RNCNO),nvl(t1.BTSNO,t2.BTSNO),max(nvl(t1.DATA1,t2.DATA2)) from t1 full join t2 on t1.MMSNO=t2.MMSNO and t1.RNCNO=t2.RNCNO t1.BTSNO=t2.BTSNO group by nvl(t1.MMSNO, t2.MMSNO),nvl(t1.RNCNO,t2.RNCNO),nvl(t1.BTSNO,t2.BTSNO)如果按你说的
      

  5.   

    谢谢大家。可能是我说的不太完整。table1: 
    MMSNO,RNCNO,BTSNO,SECTNO,DATAtable2: 
    MMSNO,RNCNO,BTSNO,SECTNO,DATAtable1和table2的数据字段名是一样的。
    在table1中必须以MMSNO/RNCNO/BTSNO为单位,求出最大值
    在table2中也必须以MMSNO/RNCNO/BTSNO为单位,求出最大值
    然后table1和table2中的最大值,还要进行比较,求出最大值。下面的SQL,可以用2条记录分别取出table1和table2的最大值,然后再进行比较。
    但是有没有办法在一条记录中就能取出最大值呢?SELECT * FROM 
    (SELECT     MMSNO,
                RNCNO,
                BTSNO,
                MAX(DATA) OVER (PARTITION BY MMSNO,RNCNO,BTSNO)
     FROM       table1
     UNION 
     SELECT     MMSNO,
                RNCNO,
                BTSNO,
                MAX(DATA) OVER (PARTITION BY MMSNO,RNCNO,BTSNO)
     FROM       table2
    )
    ORDER BY MMSNO,BTSNO,RNCNO
      

  6.   

    这样不就是最大值?SELECT MMSNO,
           RNCNO,
           BTSNO,
           MAX(DATA) OVER(PARTITION BY MMSNO, RNCNO, BTSNO)
      FROM (SELECT MMSNO,
                   RNCNO,
                   BTSNO,
                   MAX(DATA) OVER(PARTITION BY MMSNO, RNCNO, BTSNO)
              FROM table1
            UNION
            SELECT MMSNO,
                   RNCNO,
                   BTSNO,
                   MAX(DATA) OVER(PARTITION BY MMSNO, RNCNO, BTSNO)
              FROM table2)
      

  7.   

    这样要清楚点 SELECT MMSNO,
            RNCNO,
            BTSNO,
            number1,
            MAX(number1) OVER(PARTITION BY MMSNO, RNCNO, BTSNO)
       FROM (SELECT MMSNO,
                    RNCNO,
                    BTSNO,
                    MAX(DATA) OVER(PARTITION BY MMSNO, RNCNO, BTSNO) number1
               FROM table1
             UNION
             SELECT MMSNO,
                    RNCNO,
                    BTSNO,
                    MAX(DATA) OVER(PARTITION BY MMSNO, RNCNO, BTSNO) number1
               FROM table2)