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 :

problème avec order by et union


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut problème avec order by et union
    Bonjour à tous,
    j'aurai besoin de vos eclaircissements sur la requête suivante,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT DISTINCT s.telex, s.raison_sociale, i.num_incident, to_char(i.date_creation,'dd/mm/yyyy')as date_creation, to_char(i.date_creation,'HH24:MM:SS') as heure_creation,
                id.libelle_demande, i.etat, ir.categorie, ir.sous_categorie
                FROM societe s, incident i, incident_demande id, incident_reponse ir, contrat_service_detail csd
                WHERE s.id_societe = i.id_societe
                AND s.id_societe=csd.id_societe
                AND id.num_incident = i.num_incident
                AND ir.num_incident = i.num_incident
                AND ir.type_reponse = 20
                AND id.type = 10
              AND i.num_incident >= '$num_dep'
              AND i.date_creation <= to_date('$date_fin','dd/mm/yyyy hh24:mi:ss')
              AND csd.contrat_savoye = 1
     
                        UNION
     
                        SELECT DISTINCT s.telex, s.raison_sociale, i.num_incident, to_char(i.date_creation,'dd/mm/yyyy')as date_creation, to_char(i.date_creation,'HH24:MM:SS') as heure_creation,
                id.libelle_demande, i.etat, ir.categorie, ir.sous_categorie
                FROM societe s, incident i, incident_demande id, incident_reponse ir, contrat_service_detail csd
                WHERE s.id_societe = i.id_societe
                AND s.id_societe=csd.id_societe
                AND id.num_incident = i.num_incident
                AND ir.num_incident = i.num_incident
                AND ir.type_reponse = 20
                AND id.type = 10
              AND i.num_incident <= '$num_dep'
              AND i.etat != 60          
              AND csd.contrat_savoye = 1
              ORDER BY to_date (date_creation, 'dd/mm/yyyy'), heure_creation
    en effet, si j'execute seulement la premiere partie de la requete (avant l'union, ou seulement la 2ème partie), avec le order by tel qu'il est écrit, et la bien la requete s'execute correctement.
    de même si j 'execute la totalité de la requete mais avec un order by comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY date_creation, heure_creation
    et bien la requete s'execute mais le trie se fait seulement sur le jour de la date et ne tiens pas compte du mois et de l'année.
    est ce que quelqu un peut me dire pourquoi (et ce que je dois faire pour pouvoir executer ma requete correctement).
    d'avance merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    J'ai pas bien compris ta question...

    Par contre, si tu veux savoir pourquoi, quand tu mets la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ORDER BY date_creation, heure_creation
    tes données son triées par le jour en premier lieu, cela vient très certainement du fait que ta colonne date_creation est un champ texte. Le trie sur un champ texte se fait donc et il ne tient pas compte de la date mais seulement des caractères et ce, un par un.

    J'espère avoir répondu à ta question.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut
    ok, c'est ce que je pensais.
    pour etre plus clair, la requete fonctionne dans les cas suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SELECT DISTINCT s.telex, s.raison_sociale, i.num_incident, to_char(i.date_creation,'dd/mm/yyyy')as date_creation, to_char(i.date_creation,'HH24:MM:SS') as heure_creation,
                id.libelle_demande, i.etat, ir.categorie, ir.sous_categorie
                FROM societe s, incident i, incident_demande id, incident_reponse ir, contrat_service_detail csd
                WHERE s.id_societe = i.id_societe
                AND s.id_societe=csd.id_societe
                AND id.num_incident = i.num_incident
                AND ir.num_incident = i.num_incident
                AND ir.type_reponse = 20
                AND id.type = 10
              AND i.num_incident >= '$num_dep'
              AND i.date_creation <= to_date('$date_fin','dd/mm/yyyy hh24:mi:ss')
              AND csd.contrat_savoye = 1
     
     
    ORDER BY to_date (date_creation, 'dd/mm/yyyy'), heure_creation
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT DISTINCT s.telex, s.raison_sociale, i.num_incident, to_char(i.date_creation,'dd/mm/yyyy')as date_creation, to_char(i.date_creation,'HH24:MM:SS') as heure_creation,
                id.libelle_demande, i.etat, ir.categorie, ir.sous_categorie
                FROM societe s, incident i, incident_demande id, incident_reponse ir, contrat_service_detail csd
                WHERE s.id_societe = i.id_societe
                AND s.id_societe=csd.id_societe
                AND id.num_incident = i.num_incident
                AND ir.num_incident = i.num_incident
                AND ir.type_reponse = 20
                AND id.type = 10
              AND i.num_incident <= '$num_dep'
              AND i.etat != 60          
              AND csd.contrat_savoye = 1
              ORDER BY to_date (date_creation, 'dd/mm/yyyy'), heure_creation
    mais lorsque je fais l'union entre les deux select et que je veux les trier grace au order by, et bien ça passe pas. Oracleme dit que le trie doit se faire sur un membre de la liste select.
    mais ce que je pige pas, c est pourquoi j ai pas la meme erreur quand j axecute un select seul ....

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    Si tu peux donner le texte de ton erreur, ça devrait nous éclairsir.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut
    le voila:

    ORA-01785: ORDER BY item must be the number of a SELECT-list expression

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par ghostdog
    mais lorsque je fais l'union entre les deux select et que je veux les trier grace au order by, et bien ça passe pas. Oracleme dit que le trie doit se faire sur un membre de la liste select.
    mais ce que je pige pas, c est pourquoi j ai pas la meme erreur quand j axecute un select seul ....
    Parce que cette erreur n'existe que dans une union !

    Le ORDER BY dand une union porte sur le résultat de l'union et ne peut porter que sur les colonne sélectionnées, le moyen le plus simple de s'en rendre compte est que dans une UNION, un ORDER BY 1, 3 (par exemple) est parfaitement valide les N° correspondant aux colonnes sélectionnées.

    Si tu veux ordonner selon un élément non dans le SELECT, il suffit d'ajouter l'élément de tri dans le SELECT. Dans ton cas, tu ajoutes "i.date_creation as ORDRE" dans tes deux sous-select, et tu fais ORDER BY ORDRE à la fin.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut
    désolé, mais le problème est toujours la. j ai deja fait un alias dans mes selects,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ....
    to_char(i.date_creation,'dd/mm/yyyy')as date_creation, 
    to_char(i.date_creation,'HH24:MM:SS') as heure_creation,
    ....
    le trie s effectue si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    order by date_creation, heure_creation
    mais le souci c'est qu'il se fait seulement sur le jour.
    par exemple j obtiens comme résultats:
    .... 22/05/2005
    .....23/09/2006
    .....25/01/2004

    alors que je voudrait
    .... 25/01/2004
    .....22/05/2005
    .....23/09/2006

    et je viens d'essayer de remplacer to_char par to_date dans mes selects, mais comme le champs est au format date, ça passe pas ...

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par ghostdog
    désolé, mais le problème est toujours la. j ai deja fait un alias dans mes selects,
    Ce qui n'a rien à voir avec ce que je t'ai proposé, relis mon post !

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut
    milles excuses, j avais pas compris qu'il fallait carrement ajouter un champ !!!
    en tout cas, super ça marche nickel ...
    je n aurais jamais penser a faire ça !!!
    en tout cas, merci a vous pour votre aide.
    a bientôt.
    merci.

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

Discussions similaires

  1. Problème avec ORDER BY et chars
    Par vdumont dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 02/05/2007, 22h20
  2. [MySQL] Problème avec ORDER BY
    Par Vianney78 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 15/03/2007, 15h35
  3. Problème avec ORDER BY et champ de type "text"
    Par mouchkar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/12/2006, 14h38
  4. [Requête]Problème avec ORDER BY NZ
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/11/2006, 20h27
  5. [MySQL] problème avec ORDER BY _ DESC avec des flottants
    Par Hayabusa dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/08/2006, 00h00

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