[SQL] alias de subquery avec Oracle

alias de subquery avec Oracle [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-05-2009 à 13:09:19    

Bonjour,
 
j'ai un petit probleme sous Oracle, l example ci dessous n'est pas optimum, mais j aimerai bien pouvoir le faire marcher:  
     query A:
 
select ... from....  
 
Query B
 
select ... from ....
 
 
Query C
 
select A.xxx B.xxx from A
inner join A.yyy=B.yyyy AND ....
 
 
donc voila,le probleme est le suivant:
Comment nomme toi une querie sous Oracle?
 
J ai essaye pas mal de chose, genre "AS" ou rien et a chaque ca coince dessus:
(select .... from....) A
 
Voila
Merci                                                

Reply

Marsh Posté le 22-05-2009 à 13:09:19   

Reply

Marsh Posté le 22-05-2009 à 13:11:47    

rien compris à ce que tu veux faire... essaie d'être plus explicite stp (j'ai bien compris que tu voulais aliaser une sous requête, mais je soupçonne qu'il existe bien plus simple que ce que tu veux faire)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 22-05-2009 à 13:36:58    

Tu peux regarder du coté des vues aussi ...
 
create view MYVIEW
as (select chp1, chp2 from matable)
 
ensuite  
 
select M.chp1 from MYVIEW M ....
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 22-05-2009 à 13:57:41    

Merci,  
je vais jeter un oeil,
 
Voila ma query... et le probleme, c est l alias.
Je voudrais simplement nommer mes 2 queries:
CID_max et l autre CID_hour et avec Oracle, ca n a pas l air si simple...
 
 
(
select  max((t.pmexisorigconns+t.pmexistermconns+t.pmexistransconns)/248)  CID ,to_date(t.cbt),v.site_id
 from pmdata_u850_xshmy90801.aal2ap_a t  
inner join site_subrack v on v.site_id=substr(t.fdn,length(t.fdn)-6)
where t.CBT>to_date(SYSDATE) AND t.timeres_id=1
group by  to_date(t.CBT),v.site_id
) CID_max
 
(select  (t.pmexisorigconns+t.pmexistermconns+t.pmexistransconns)/248  CID ,t.cbt hour, to_date(cbt),v.site_id
 from pmdata_u850_xshmy90801.aal2ap_a t  
inner join site_subrack v on v.site_id=substr(t.fdn,length(t.fdn)-6)
where t.CBT>to_date(SYSDATE) AND t.timeres_id=1
) CID_hour
 
select CID_max.CID,CID_max.date,CID_max.site_id,CID_hour.hour from CID_max
inner join CID_hour on CID_hour.site_id=CID_max.site_id AND CID_hour.CID=CID_max.CID AND CID_hour.date=CID_max.date
 
 
Oui, il y a d autres alternative, je suis d accord, genre un  Rank() over Partition, mais bon.
 
Merci!

Reply

Marsh Posté le 22-05-2009 à 14:22:39    

create view CID_max  
as
(  
select  max((t.pmexisorigconns+t.pmexistermconns+t.pmexistransconns)/248)  CID ,to_date(t.cbt),v.site_id  
 from pmdata_u850_xshmy90801.aal2ap_a t  
inner join site_subrack v on v.site_id=substr(t.fdn,length(t.fdn)-6)  
where t.CBT>to_date(SYSDATE) AND t.timeres_id=1  
group by  to_date(t.CBT),v.site_id  
)  
 
et
 
create view CID_hour  
as
(select  (t.pmexisorigconns+t.pmexistermconns+t.pmexistransconns)/248  CID ,t.cbt hour, to_date(cbt),v.site_id  
 from pmdata_u850_xshmy90801.aal2ap_a t  
inner join site_subrack v on v.site_id=substr(t.fdn,length(t.fdn)-6)  
where t.CBT>to_date(SYSDATE) AND t.timeres_id=1  
)  
et la requête d'après devrait passer ;-)


Message édité par vttman2 le 22-05-2009 à 14:23:01

---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 22-05-2009 à 14:36:51    

essayes un truc de ce style :

Code :
  1. SELECT
  2.  ...
  3. FROM
  4.  (
  5.     SELECT...
  6.  ) CID_max,
  7.  (
  8.     SELECT...
  9.  ) CID_hour
  10. WHERE
  11.  ...

Reply

Marsh Posté le 23-05-2009 à 10:29:56    

merci, j essayerai au boulot lundi!
Je ne connaissais pas create view.... mais ca semble pas mal du tout.
 
Couak, oui, il me semble avoir essayer ca aussi, mais ca coince au niveau de CID_max, toujours le meme probleme avec le nom de la subquery...

Reply

Marsh Posté le 25-05-2009 à 10:36:19    

bah chez moi ca marche =) pas ta requête car j'ai la flemme de recréer les mêmes structure de table, mais le même style j'ai pas de soucis
en postant ton message d'erreur et ta requête peut-être qu'on y verra mieux

Reply

Marsh Posté le 25-05-2009 à 10:49:45    

il faut voir exactement ce que tu veux faire, si tu veux garder la structure que tu as écrit alors il faut passer par un WITH, je te laisse chercher dans la doc, en gros cela permet de définir un query et de l'aliaser, puis de le réutiliser dans une autre requête, cela sert a alléger la lecture du code, mais c'est surtout utile si cette query est utilisée plusieurs fois dans un même query, car déja, ce n'est écrit qu'une fois, mais surtout la requête ne sera effectuée que une fois même si plusieurs appels.
 
 
mais dans ton cas pourquoi ne fais tu pas juste
 
 

Code :
  1. SELECT CID_max.CID,CID_max.date,CID_max.site_id,CID_hour.hour FROM CID_max
  2. (SELECT  max((t.pmexisorigconns+t.pmexistermconns+t.pmexistransconns)/248)  CID ,to_date(t.cbt),v.site_id
  3. FROM pmdata_u850_xshmy90801.aal2ap_a t  
  4. INNER JOIN site_subrack v ON v.site_id=substr(t.fdn,length(t.fdn)-6)
  5. WHERE t.CBT>to_date(SYSDATE) AND t.timeres_id=1
  6. GROUP BY  to_date(t.CBT),v.site_id
  7. ) CID_max
  8. INNER JOIN
  9. (SELECT  (t.pmexisorigconns+t.pmexistermconns+t.pmexistransconns)/248  CID ,t.cbt hour, to_date(cbt),v.site_id
  10. FROM pmdata_u850_xshmy90801.aal2ap_a t  
  11. INNER JOIN site_subrack v ON v.site_id=substr(t.fdn,length(t.fdn)-6)
  12. WHERE t.CBT>to_date(SYSDATE) AND t.timeres_id=1
  13. ) CID_hour ON CID_hour.site_id=CID_max.site_id AND CID_hour.CID=CID_max.CID AND CID_hour.date=CID_max.date


 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed