2014-05-22 4 views
0

J'ai besoin de sélectionner quelques lignes de la table mais que les lignes doivent être commandées par ROWNUMBER asc et si ROWNUMBER est nul je dois commander par created desc;ordre par asc et desc

Ceci est ma requête sql sans ordre par condition;

SELECT FIN_CGU.*, RES.ROWNUMBER 
    FROM COMM$GROUP_USER FIN_CGU 
    FULL JOIN (SELECT AGGR_RES.R_GR AS TOT_GR, 
        ROW_NUMBER() OVER(ORDER BY AGGR_RES.M_DATE DESC) AS ROWNUMBER 
       FROM (SELECT MSG.GROUP_ID AS R_GR, MAX(MSG.CREATED) AS M_DATE 
         FROM COMM$MESSAGE MSG 
         JOIN COMM$GROUP_USER GR_USR 
         ON GR_USR.GROUP_ID = MSG.GROUP_ID 
         JOIN COMM$GROUP GR 
         ON GR.ID = MSG.GROUP_ID 
         WHERE GR.STATE <> 'DELETED' 
         AND GR_USR.STATE <> 'DELETED' 
         AND MSG.STATE <> 'DELETED' 
         AND GR_USR.USER_ID = 9172771513163989084 
         GROUP BY MSG.GROUP_ID) AGGR_RES 
       ORDER BY AGGR_RES.M_DATE DESC) RES 
    ON FIN_CGU.GROUP_ID = RES.TOT_GR 
    JOIN COMM$GROUP CG 
    ON FIN_CGU.GROUP_ID = CG.ID 
WHERE (ROWNUMBER IS NULL OR ROWNUMBER BETWEEN 1 AND 3) 
    AND FIN_CGU.USER_ID = 9172771513163989084 
    AND RES.ROWNUM <= 3 
ORDER BY 

Oracle 10g;

+0

est-ORDER BY ROWNUMBER, CRÉÉE fonctionne pour vous DESC? Si non, quelle est la différence avec le jeu de résultats souhaité? Pouvez-vous ajouter un petit exemple de commande désirée à la question? – ThinkJet

Répondre

1
  1. on ne sait pas à ce que créé desc vous avez fait référence en raison du fait que vous avez spécifié FIN_CGU. *, et pas la liste complète des colonnes.
  2. si vous faisiez référence à la SELECT MSG.GROUP_ID AS R_GR, MAX (MSG. CRÉÉ) AS M_DATE et créé dans cette liste, vous devez apporter cette colonne à partir de votre point de vue dynamique qui sont référencé comme RES (et référence interne comme AGGR_RES) à la première liste de colonnes.
  3. Une fois que vous avez cette colonne dans la liste des colonnes, il semble que votre requête interne devrait fournir un ordre; de sorte que vous pouvez le faire soit par cas ou NVL comme:

    commande par cas lorsque ROWNUMBER n'est pas nul alors ROWNUMBER fin a créé d'autre

  4. vous cann't bascule asc | desc sur le même liste des colonnes de manière dynamique sur une requête statique. vous pouvez le faire en SQL dynamique. vous pouvez changer la colonne de commande bien (voir ci)

Questions connexes