IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Référence à une colonne dans un autre select


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Référence à une colonne dans un autre select
    Bonjour à tous,
    mon problème n'est pas simple à expliquer. je cherche à faire une requete du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select trunc(date), count(id), 
    (select count(t2.id) from table t2 where trunc(t1.date)=trunc(t2.date) and (date-date2<=1))
    from table t1
    group by trunc(date)
    order by 1 desc;
    en fait, pour chaque jour de la colonne 'date', je veux le nombre d'id correspondant ainsi que le nombre d'id dont la différence entre la colonne 'date' et la colonne 'date2' est inférieure ou égale à 1 jour.
    Les dates sont au format 'AAAA/MM/JJ hh/mm/ss' d'où le trunc pour avoir le résultat en jour.

    Le problème avec la requête en dessous c'est le "trunc(t1.date)" du 2ème select car "ce n'est pas une expression GROUP BY", et t1.(trunc(date)) ne marche évidemment pas.
    J'ai essayé de nommer le trunc(date) du premier select mais ça ne va pas non plus.

    Précision : je travaille sous oracle

    Je reste bloqué sur cette idée pour avoir le résultat attendu, mais si vous avez une toute autre solution, n'hésitez pas à m'en faire part.

    Merci beaucoup

    Vinz

  2. #2
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    as-tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select trunc(date), count(id), 
    (select count(t2.id) from table t2 where trunc(t1.date)=trunc(t2.date) and (date-date2<=1))
    from table t1
    group by trunc(date), (select count(t2.id) from table t2 where trunc(t1.date)=trunc(t2.date) and (date-date2<=1))
    order by 1 desc;
    a tout hasard...
    Juvamine

  3. #3
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Mettre un select from dans la clause select c'est vraiment à éviter. Pour chaque ligne il va refaire la requête: un cauchemar. Il faut joindre les 2 tables au niveau du FROM principal et en plus, si nécessaire, faire une sous requête au niveau du FROM (ce que je n'ai pas fait dans mon exemple).

    Il faudrait faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select trunc(date), count(id), 
    count(t2.id) 
    from table1 t1 inner join table2 t2
    on trunc(t1.date)=trunc(t2.date) and (date-date2<=1)
    group by trunc(date)
    order by 1 desc;
    Par contre j'ai du mal à comprendre l'utilisation que tu fais de trunc(fonction oracle) : tu veux avoir le jour sans heure, minutes, secondes ?

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos messages.
    Pour info, je m'en suis sorti hier en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select date1, count(ident), sum(diff)
    from
    (
    select trunc(date) date1, id ident, 
    decode(trunc(date2-date), 0, 1, 0) diff -- si c'est moins de 24h -> <1 donc =0
    from table
    )
    group by date1
    Sinon, oui, le trunc, c'est pour couper la date pour l'avoir sans les heures.

    Cordialement,

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Copie des valeurs d'une colonne dans un autre fichier sous condition
    Par Fred_rt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/03/2015, 11h50
  2. [XL-2003] Extraction de ligne selon la valeur d'une colonne dans un autre fichier
    Par vikvalesteam dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/07/2011, 10h52
  3. Copie une colonne dans l'autre
    Par afrodje dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/10/2007, 16h37
  4. Réponses: 1
    Dernier message: 15/05/2007, 10h40
  5. Rajouter une colonne dans un select *
    Par phb07 dans le forum Oracle
    Réponses: 5
    Dernier message: 30/03/2007, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo