2011-03-23 7 views
0

J'ai été chargé de convertir un ancien programme de rapports en rapports Oracle et je me suis arrêté lorsque j'ai dû joindre deux requêtes pour que le rapport fonctionne. Je ne suis pas nouveau à SQL, mais j'ai besoin d'aide sur celui-ci. Pour Oracle Reports 11g, les rapports doivent afficher les résultats des deux requêtes suivantes. Par conséquent, ces requêtes doivent être réunies dans une seule requête SQL pour que le rapport fonctionne.Requête SQL: comment joindre deux requêtes SQL dans Oracle Rapport

première requête:

select table_name 
    , to_char(load_date, 'MM/DD/ YYYY') as XDATE 
    , to_char(number_name) as NUMBER NAME 
    , round(sysdate-load_date) as DAYS 
    , 'E' AS TABLEIND 
from error_table 
where load_date is not null 
    and round(sysdate-load_date) > 15 
    and number_name not in 
    (select number_name 
    from table_comments) 
order by table_name 

seconde requête:

select table_name 
    , to_char(load_date, 'MM/DD/ YYYY') as XDATE 
    , to_char(number_name) as NUMBER NAME 
    , round(sysdate-load_date) as DAYS 
    , 'O' AS TABLEIND 
from other_table 
where load_date is not null 
    and round(sysdate-load_date) > 15 
    and number_name not in 
    (select number_name 
    from table_comments) 
order by table_name 

Les résultats de ces deux requêtes doivent montrer les résultats de ces deux requêtes avec la première première requête, et la seconde requête deuxième. Toute aide avec ce problème est très appréciée.

Répondre

0

Si vous devez l'avoir dans ce format, placez les résultats de la première requête dans une table temporaire avec une colonne d'identité, puis placez les résultats de la deuxième requête dans la même table.

Sélectionnez ensuite à partir de cette table temporaire triée de cette colonne d'identité

+1

Ou une déclaration de l'Union peut-être – asawyer

+0

Si vous utilisez Union vous devez vous assurer de ne pas éliminer les doublons, mais oui ça marcherait, je crois ... –

+1

UNION supprime par défaut dupes. Mais il n'y en aura pas excepté * dans * les requêtes préexistantes individuelles peut-être. – Tim

1

Si vous essayez d'obtenir ces à venir dans un jeu de résultats, essayez une union entre eux. Vous pouvez commander l'ensemble des résultats par TABLEIND, nom_table pour trier comme vous le souhaitez, je crois.

0

Vous pouvez créer une requête de l'union avec les requêtes existantes que les vues inline:

select 1 as whichQuery, q1.col, q1.col, ... 
    from 
    (select....) as q1 
    union all 
    select 2 as whichQuery, q2.col, q2.col, ... 
    from 
    (select ....) as q2 

et vous pouvez commander par whichQuery. Cela garantit la commande que vous voulez dans le cas où la valeur de tri de la table TABLEIND alpha devrait varier (et ne pas trier dans l'ordre souhaité).

2
(Query1 
--leave out the "order by" line 
) 
UNION ALL 
(Query2 
--leave out the "order by" line, too 
) 
ORDER BY TABLEIND 
     , table_name