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 :

Utilisation obligatoire de Union ?


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Utilisation obligatoire de Union ?
    Bonjour, cela fait plusieurs heures que je me casse la tête sur un problème.

    Le sujet : Déterminer la durée d'arrêt en heures par éolienne en fonction de la cause depuis sa mise en fonctionnement.

    Lorsque je le fais pour l'éolienne 1 ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT `numeol` as "Numéro de l'éolienne"
    ,cause.intitule as 'Raison'
    ,count(*) as 'Nombre de fois arrêté'
    ,(SUM(TRUNCATE(TIMEDIFF(`DateHeureFinPanne`,`DateHeureDebutPanne`)/(10000),1))) as 'Durée des arrêts en heure' 
    from panne
    ,cause 
     
    where panne.CodeCause=cause.CodeCause 
    and `numeol`=1 group by cause.intitule
    j'ai une dizaine d'éolienne a faire comme ça et ma seule solution a été de faire un union qui répète a chaque fois le même truc avec 'numeol'=2, 'numeol'=3 ...

    je pensais qu'en rentrant ce code ça marcherai mais non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where panne.CodeCause=cause.CodeCause 
    and eolienne.numeol=panne.numeol
    en ajoutant la table eolienne dans mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from group by cause.intitule
    .

    Existe t'il une autre possibilité ?
    I'm lost ! please help me.

    edit (en espérant être plus clair)

    j'ai un parc de 10 éoliennes.
    celles ci s'arretent quand il y'a trop de vent ou pas assé.(2 cause)

    sur 1 semaine .

    L'éolienne 1 s'est arrété 2 fois parce qu'il y'avait pas assé de vent
    et 3 fois car il y'en avait trop.
    L'éolienne 2 s'est arréte 1 fois car pas assé de vent et 1 fois car y'en avait trop.

    Table_Panne

    NumPanne NumEolienne_________Cause DureeArret
    1_________1__________________V-_________1 jour
    2_________1__________________V-_________1 jour
    3_________1__________________V-_________1 jour
    4_________1__________________V+_________1 jour
    5_________1__________________V+_________1 jour
    6_________2__________________V-_________1 jour
    7_________2__________________V+_________1 jour

    Je voudrais que ça m'affiche ça :

    NumEolienne_________Cause__________________DuréeTotalArret
    1__________________V-__________________3 jour
    1__________________V+__________________2 jour
    2__________________V-__________________1 Jour
    2__________________V+__________________1 Jour

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Je n'ai pas compris pourquoi tu voulais ajouter une table dans ton From
    Est-ce que ceci marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT `numeol` AS "Numéro de l'éolienne"
    ,cause.intitule AS 'Raison'
    ,count(*) AS 'Nombre de fois arrêté'
    ,(SUM(TRUNCATE(TIMEDIFF(`DateHeureFinPanne`,`DateHeureDebutPanne`)/(10000),1))) AS 'Durée des arrêts en heure' 
    FROM panne
    ,cause 
     
    WHERE panne.CodeCause=cause.CodeCause 
    
    GROUP BY cause.intitule,`numeol`
    ou en utilisant les jointures normalisées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT `numeol` AS "Numéro de l'éolienne"
    ,cause.intitule AS 'Raison'
    ,count(*) AS 'Nombre de fois arrêté'
    ,(SUM(TRUNCATE(TIMEDIFF(`DateHeureFinPanne`,`DateHeureDebutPanne`)/(10000),1))) AS 'Durée des arrêts en heure' 
    FROM panne inner join cause 
     on  panne.CodeCause=cause.CodeCause 
    GROUP BY cause.intitule,`numeol`
    Il manquait tout simplement numeol dans le group by.
    Quand on utilise des fonctions d'aggrégations, il faut mettre dans le group by tous les champs qui n'utilisent pas ces fonctions.
    a+
    Soazig

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    hey trop fort ça marche !!! soazig, tu portes bien ton appellation de membre éclairé !!! merci mille fois

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

Discussions similaires

  1. Union d'une vue utilisant aussi l'union
    Par lavazavio dans le forum Langage SQL
    Réponses: 0
    Dernier message: 03/06/2009, 16h58
  2. Utilisation d'une union
    Par mister3957 dans le forum SQL
    Réponses: 7
    Dernier message: 03/03/2009, 11h15
  3. [Profibus] Sycon, utilisation obligatoire ?
    Par pierrepo dans le forum Automation
    Réponses: 6
    Dernier message: 18/02/2008, 18h23
  4. Utilisation de l'Union
    Par salsero1 dans le forum Hibernate
    Réponses: 1
    Dernier message: 18/11/2007, 19h47
  5. Ploblème d'utilisation de UNION
    Par Cambon dans le forum SQL
    Réponses: 3
    Dernier message: 28/01/2004, 16h06

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