本帖最后由 mineral_2002 于 2010-12-26 15:05:08 编辑

解决方案 »

  1.   

    出来结果是错误的,如果去掉最后的ORDER BY可以满足第一个排序要求,但是后面两个排序要求也是必须要的
      

  2.   


    前面列出的是用到的3张表及一些数据,后面是我根据根据需求写出的SQL,排序不对,求教
      

  3.   

    怎么不对,想按照MM.ELM_OBJ_FLG,如果MM.ELM_OBJ_FLG相等再按照MM.USER_SORT排序。。
      

  4.   

    SELECT   ELM_CD, 
                      ELM_NM 
            FROM   (   SELECT          '1'  rn,  --给结果集MM和NN加个常量字段
                                    AA.COMPANY_CD, 
                                        AA.ELM_CD, 
                                        AA.ELM_NM, 
                                        AA.ELM_OBJ_FLG, 
                                        CC.USER_SORT 
                              FROM   ELEMENT_INFO   AA, 
                                        COMPANY_INFO   BB, 
                                        USER_INFO   CC 
                            WHERE   AA.COMPANY_CD   =   BB.COMPANY_CD   AND 
                                        AA.COMPANY_CD   =   CC.COMPANY_CD   AND 
                                        AA.USER_CD   =   CC.USER_CD   AND 
                                        AA.ELM_OBJ_FLG   =   '0 '   AND 
                                        AA.ELM_OBJ   =   '事务对象 ' 
                        UNION 
                        ......   //此处省去很多UNION的对象,区别是检索TABLE变化和WHERE条件不同                       SELECT   AA.COMPANY_CD, 
                                        AA.ELM_CD, 
                                        AA.ELM_NM, 
                                        AA.ELM_OBJ_FLG, 
                                        CC.USER_SORT 
                              FROM   ELEMENT_INFO   AA, 
                                        COMPANY_INFO   BB, 
                                        USER_INFO   CC 
                            WHERE   AA.COMPANY_CD   =   BB.COMPANY_CD   AND 
                                        AA.COMPANY_CD   =   CC.COMPANY_CD   AND 
                                        AA.USER_CD   =   CC.USER_CD   AND 
                                        AA.ELM_OBJ_FLG   =   '4 '   AND 
                                        AA.ELM_OBJ   LIKE   '%事务对象% ' 
                      )   MM, 
                      (         SELECT   '2' rn,COMPANY_CD   
                                    FROM   COMPANY_INFO 
                                  WHERE   COMPANY_STSTUS   =   '1 ' 
                        START   WITH   FATHER_COMPANY_CD   IS   NULL 
                        CONNECT   BY   PRIOR   COMPANY_CD   =   FATHER_COMPANY_CD 
                            ORDER   BY   COMPANY_SORT, 
                                              COMPANY_NM 
                      )   NN 
          WHERE   MM.COMPANY_CD   =   NN.COMPANY_CD 
    ORDER   BY  rn,--加个按rn排序  MM.ELM_OBJ_FLG,       --事务分类0,1,2,3,4 
                      MM.USER_SORT             --用户特定排序 
      

  5.   

    我的理解也是这样,首先连接了一个递归,如果COMPANY_CD相等,那么后面的MM.ELM_OBJ_FLG, MM.USER_SORT就会有作用,但是执行结果确实是错误的COMPANY1|---|USER11|-----ELM1111
            |      |---------ELM1112
            |      |---------ELM1113
            |---|USER12|-----ELM1121
            |      |---------ELM1122
            |      |---------ELM1123
            |---|USER13|-----ELM1131
            |      |---------ELM1132
            |      |---------ELM1133COMPANY2|---|USER21|-----ELM2211
            |      |---------ELM2212
            |      |---------ELM12213
            |---|USER22|-----ELM2221
            |      |---------ELM12222
            |      |---------ELM2223
            |---|USER23|-----ELM2231
            |      |---------ELM2232
            |      |---------ELM2233
             |USER2
             |USER1
             |USER1
      

  6.   


    特别感谢zhuomingwang的回答,明天到公司继续验证正确性,同时非常感谢Oraclefans_的回复
      

  7.   

    你的外层的order by 打乱了你里层的order by ,实际上在你程序里ORDER   BY   COMPANY_SORT, 
    COMPANY_NM 没起到任何作用,并不是你说的COMPANY_SORT这个下排序,最终的结果的只有MM.ELM_OBJ_FLG,MM.USER_SORT 起到了排序的作用,你可以尝试把外面的order by 改成(         SELECT   COMPANY_CD ,COMPANY_SORT,  COMPANY_NM  FROM   COMPANY_INFO 
                                  WHERE   COMPANY_STSTUS   =   '1 ' 
                        START   WITH   FATHER_COMPANY_CD   IS   NULL 
                        CONNECT   BY   PRIOR   COMPANY_CD   =   FATHER_COMPANY_CD 
                            ORDER   BY   COMPANY_SORT, 
                                              COMPANY_NM 
                      )   NN 
          WHERE   MM.COMPANY_CD   =   NN.COMPANY_CD 
    ORDER   BY   NN.COMPANY_SORT,  NN.COMPANY_NM,
     MM.ELM_OBJ_FLG,       --事务分类0,1,2,3,4 
                      MM.USER_SORT             --用户特定排序