Bein déjà en prenant 1 jours ou 2 pour lire les tutos que vous n'avez pas compris, puis en faisant des tests.
Ensuite revenez avec des essais si vous n'y arrivez toujours pas.
Bein déjà en prenant 1 jours ou 2 pour lire les tutos que vous n'avez pas compris, puis en faisant des tests.
Ensuite revenez avec des essais si vous n'y arrivez toujours pas.
J'ai essayé avec ce code dans un premier temps pour me familiariser :
J'ai un soucis sur l'extraction des 2 derniers caractères de la colonne MOTIF:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT DAT, sum(CASE MOTIF WHEN (SUBSTRING(MOTIF FROM 7 FOR 8))'JP' THEN 1 ELSE 0 END) AS JOUR, sum(CASE MOTIF WHEN (SUBSTRING(MOTIF FROM 7 FOR 8))'NP'THEN 1 ELSE 0 END) AS NUIT FROM S6PACTI WHERE EXTRACT(MONTH FROM DAT) = 5 GROUP BY DAT
Recherchez dans la doc de votre SGBD comment fonctionne le substring
Sous Oracle, c'est la fonction SUBSTR qui doit être utilisée.
~ Lola ~
Je suis sous oracle, j'ai essayé ceci mais sans résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT DAT,MOTIF sum(CASE MOTIF WHEN SUBSTR( MOTIF, 7, 2)='JP' THEN 1 ELSE 0 END) AS JOUR, sum(CASE MOTIF WHEN SUBSTR( MOTIF, 7, 2)='NP' THEN 1 ELSE 0 END) AS NUIT FROM S6PACTI WHERE EXTRACT(MONTH FROM DAT) = 5 GROUP BY DAT,MOTIF;
Ca fait un peu trop assistanat ce topic...
Avant d'écrire une fonction Oracle, renseignez-vous sur sa syntaxe, ses paramètres, etc...
Ensuite, quelle est l'erreur rencontrée ?
"Ca ne marche pas" n'est pas un bug....
j'ai une erreur :
Mot clé FROM absent à l'emplacement prévu
Il manque une virgule après MOTIF dans le SELECT.
~ Lola ~
j'ai ajouté la virgule et j'ai une erreur mot clé absent.
SQLment parlant, c'est pas propre tout ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE EXTRACT(MONTH FROM DAT) = 5
Syntaxiquement, et sans tenir compte d'éventuelles subtilités du dialecte SQL Oracle, ceci devrait mieux fonctionner :
Maintenant, est-ce que ça donne le bon résultat ?
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 DAT, MOTIF, SUM( CASE WHEN SUBSTR( MOTIF, 7, 2) = 'JP' THEN 1 ELSE 0 END ) AS JOUR, SUM( CASE WHEN SUBSTR( MOTIF, 7, 2) = 'NP' THEN 1 ELSE 0 END ) AS NUIT FROM S6PACTI WHERE EXTRACT(MONTH FROM DAT) = 5 GROUP BY DAT,MOTIF;
À toi de voir.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
Merci Cinephil,
Ton code fonctionne.
Dans ton code, où dois-je placer un ORDER pour classer les résultats par ordre chronologique ?
Et enfin, comment mettre la condition :
PLPPQUA est une autre table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE PLPPQUA.CODEQUAL = 'IMP2'
Je voudrais obtenir dans le résultat:
DAT/JOUR/NUIT/IMP2 JOUR/ IMP2 NUIT
Merci
ORDER BY se positionne toujours à la fin, éventuellement avant une clause LIMIT (en MySQL ; je ne connais pas l'équivalent en Oracle).
Il faut faire une jointure de cette nouvelle table avec la table de la requête ou avec la requête elle-même. Ça dépend ce que tu veux.Et enfin, comment mettre la condition :
PLPPQUA est une autre table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE PLPPQUA.CODEQUAL = 'IMP2'
Tu veux dire que tu veux à la fois les totaux jours et nuit d'une part et les totaux jour et nuit pour IMP2 d'autre part ?Je voudrais obtenir dans le résultat:
DAT/JOUR/NUIT/IMP2 JOUR/ IMP2 NUIT
Merci
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
Oui je voudrais les deux.
Merci
Comment faut-il imbriquer la jointure ?
merci
Bonjour,
Depuis le début, vous donnez l'impression d'attendre sagement dans votre fauteuil qu'on vienne vous apporter la solution sur un plateau... Je trouve déjà que cinephil en a trop fait, étant donné le peu d'énergie que vous mettez à essayer de comprendre ce qui est fait... La moindre des choses étant de lire les liens fournis...
Cordialement,
Arkhena
A bove ante, ab asino retro, a stulto undique caveto
Bonjour,
Désolé mais je débute en SQL, alors veuillez m'excuser de ne pas tout comprendre.
Ce que je ne comprends pas, c'est comment faire intégrer une jointure avec le code de CinePhil.
Merci
Pour le moment, avec la requête, tu as plutôt ces entêtes de colonnes :Je voudrais obtenir dans le résultat:
DAT/JOUR/NUIT/IMP2 JOUR/ IMP2 NUIT
DAT / JOURSPP / NUITSPP / JOURSPV / NUITSPV / ASTJ / ASTN
Ça ne ressemble pas du tout au résultat que tu souhaites alors il faudrait nous indiquer comment tu pars de l'un pour arriver à l'autre. Ou alors il s'agit d'une demande totalement différente ? Une autre requête à faire ?
Et si tu as lu l'article sur les jointures dont je t'ai donné le lien, tu verras que pour joindre deux tables (ou une table et une requête, ou deux requêtes), il faut déterminer une condition de jointure qui cherchera généralement à faire correpondre les valeurs d'une colonne d'une table avec les valeurs d'une colonne de l'autre table.
Nous n'avons pas l'information sur ce qui permettrait de joindre les deux tables, nous ne pouvons donc pas t'aider avec les informations partielles que tu nous donnes.
Lis la phrase en bleu de ma signature et applique son principe. Et lis aussi les règles applicables à ce forum.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager