2017-08-08 1 views
0

J'ai une requête comme ce qui suit:Declare en PL/SQL pour une partie de la requête

select t1.varid, t1.var1, t1.var2, t1.vardata, t2.varid, t2.var1, t2,.var2 
from table1 t1, table2 t2 
where t1.varid = t2.varid 
and t1.vardata between to_date('20170807','YYYYMMDD') and to_date('20170808','YYYYMMDD') 

Maintenant, la question est la suivante: je dois extraire les données non seulement dans la plage de données spécifiées dans la requête ci-dessus, mais je veux extraire de nombreuses autres plages dans la même requête. Pour ce faire, j'ai utilisé UNION ALL et cela fonctionne. Le problème est que je dois réécrire cette partie plusieurs fois:

select t1.varid, t1.var1, t1.var2, t1.vardata, t2.varid, t2.var1, t2, var2 
from table1 t1, table2 t2 
where t1.varid = t2.varid 

Y at-il une astuce pour savoir comment définir select t1.varid... comme une variable nommée afin d'éviter une longue ennuyeuse requête répétée?

Toutes les autres solutions sont les bienvenues.

+0

Pas dans au moins 'SQL'. Vous pouvez également écrire une procédure et passer une plage de dates pour obtenir la sortie souhaitée. – XING

+0

Salut XING, je ne comprends pas: n'est-il pas possible de: définir (sélectionner var1, var2, ... de table) comme variable de nom? Il semble très étrange ... – user1010441

+0

Je voulais dire, vous ne pouvez pas éviter long ennuyeux 'UNION ALL '. Aussi quel est le problème lorsque vous mettez une clé OR avec intervalle de temps différent dans votre requête. – XING

Répondre

0

Comme indiqué dans le chat, vous pouvez le faire comme ci-dessous:

SELECT t1.varid as col1, 
     t1.var1 as col2, 
     t1.var2, 
     t1.vardata, 
     t2.varid, 
     t2.var1, 
     t2, 
     .var2 
    FROM table1 t1, table2 t2 
WHERE  t1.varid = t2.varid 
     AND t1.vardata BETWEEN TO_DATE ('20170807', 'YYYYMMDD') 
          AND TO_DATE ('20170808', 'YYYYMMDD') 
     --- Give date ranges.     
     OR t1.vardata BETWEEN TO_DATE ('20170907', 'YYYYMMDD') 
          AND TO_DATE ('20171008', 'YYYYMMDD')     
     OR .... 
     OR .... 
+0

Vraiment merci XING, il n'est donc pas nécessaire d'utiliser Union tous, mais le solutin était d'utiliser OU pour les gammes .. – user1010441

+0

Je tiens à vous demander également comment définir comme variabe la partie "sélectionner ... de .. "est-il possible de définir cette partie comme" namevariable "? – user1010441

+0

C'est vrai. Si vos tables sont 'mêmes' et que la seule partie qui change est la plage de dates, alors' OU' devrait faire le travail. Vous pouvez 'Alias' un nom de colonne. Voir dans l'exemple – XING

0

Vous pouvez aller chercher les dates directement à partir d'une table comme celui-ci au lieu de réécrire les déclarations répétées:

Select 'select t1.varid, t1.var1, t1.var2, t1.vardata, t2.varid, t2.var1, t2,.var2 
From table1 t1, table2 t2 where t1.varid = t2.varid and t1.vardata between to_date('''+MY_DATE+''', ''yyyymmdd'')' from tableofdate 

ci-dessous est le schéma que j'ai utilisé. Ceci est juste un échantillon. S'il vous plaît l'éditer selon vos besoins

create table tableofdate(my_date varchar(100)) 
insert into tableofdate values ('20170808') 
+0

Thak vous, bu je préfère ne pas créer une table. – user1010441

+0

de toute façon est une solution élégante ... merci .. – user1010441