Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2008, 10h58   #1
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Par défaut [SQL] Recherche sur 2 critères

Bonjour,

J'ai une table avec des personnes ainsi que d'autres infos qui sont "pointés" tout les mois. Dans cette table une personne est pointé au mois de janvier, février, mars..... il existe autant de lignes que la personne est "pointé". Par contre au cours de l'année cette personne évolue dans la société. Ainsi elle peut être au niveau 1 pendant les 3 premiers mois et au niveau 2 à partir des mois suivants. Elle ne peut pas revenir en arrière.
Citation:
NOM / PRENOM / DATE_NAISSANCE / MOIS / ANNEE / NIVEAU
NOM1 /PRENOM1 /01-01-1970 /1 /2008 /1
NOM1 /PRENOM1 /01-01-1970 /2 /2008 /1
NOM1 /PRENOM1 /01-01-1970 /3 /2008 /1
NOM1 /PRENOM1 /01-01-1970 /4 /2008 /2
NOM1 /PRENOM1 /01-01-1970 /5 /2008 /2
NOM2 /PRENOM2 /02-01-1970 /1 /2008 /1
NOM2 /PRENOM2 /02-01-1970 /2 /2008 /1
NOM2 /PRENOM2 /02-01-1970 /3 /2008 /1
Ce que je voudrais c'est requêter la personne qui a changé au cours de l'année.
J'ai donc fait une requéte mais elle me donne toute les personne qui sont en 1 et 2. Moi je veux que celles qui ont changés dans la période.
Citation:
SELECT *
FROM ma_table1
WHERE NIVEAU IN (1,2)
AND ANNEE = 2008
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 11h22   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Je te propose ca :
Code :
1
2
3
4
5
 SELECT nom, prenom, count(niveau) as changement
FROM ma_table1
WHERE ANNEE = 2008 
HAVING changement > 1
GROUP BY id_utilisateur
Je te conseille plutot d'enregistrer l'id de la personne plutot que nom / prenom car si tu as des homonymes, ils vont se mélanger.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 11h41   #3
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Bonjour,

Dans mon cas le niveau est 85 et 87 et il existe un niveau 86 que je ne veux pas requêté!!! Donc cela ne fonctionne pas avec >. Peut-on metrre autre chose ????
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 11h48   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Dans ma requete, on compte le nombre de niveau qu'a eu une personne.
"HAVING changement > 1" c'est pour limiter aux personnes ayant eu plus d'un niveau.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 13h54   #5
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Rebonjour,

Désolé mais je n'avais jamais employé cette commande. J'ai compris son fonctionnement dans ton 2 mail. Par contre j'ai une erreur sur "HAVING changement >1"
Citation:
ORA-00904: "CHANGEMENT" : identificateur non valide
Je précise que j'utilise SQL tools pour faire mes requêtes.

En fait il suffit de mettre des ' autour de "changement" et de "1" pour que cela fonctionne.
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 14h05   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
c'est une base oracle ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 14h55   #7
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Rebonjour

Je ne connais pas le système qui gére cette base de données, mais je sais que je fais que des requêtes en SQL D'ailleur à quoi puis-je voir si c'est ORACLE ou autre chose ??. J'ai enfin réussi à faire la requête par contre je ressort "9 changements" sur l'année 2008 pour chaque personne. Je pensais faire un count (distinct niveau) pour eviter les doublons. (Ce qui fonctionne d'ailleurs)
Mon probléme reste situé sur le chiffre de "changement" car dans mon résultat j'ai tous ceux qui ont un changement alors que je demande plus de "1"
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 15h17   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Et comme ca ?
Code :
1
2
3
4
5
SELECT nom, prenom, count(niveau) as changement
FROM ma_table1
WHERE ANNEE = 2008 
GROUP BY id_utilisateur 
HAVING changement > 1
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 15h47   #9
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Rebonjour,

Il me dit toujours Nombre non valide...
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 15h54   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Déjà ce n'est pas la meme erreur.

Tu pourrais nous mettre la requête exacte que tu fais ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 16h12   #11
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Rebonjour,
Voilà la requête. Elle fonctionne par contre elle me renvoi les "changement 1" et plus, moi je voudrais que les changements 2.
Code :
1
2
3
4
5
SELECT ID, NOM, PRENOM, Count (DISTINCT NIVEAU) AS changement, INDICE
FROM personnel
WHERE ANNEE = 2008 AND NIVEAU IN (85,87)
GROUP BY ID, NOM, PRENOM, INDICE 
HAVING 'changement' > '1'
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 16h30   #12
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Ca serait bien de travailler avec la requete que j'ai proposé pour un début

parce que "COUNT(DISTINCT niveau)" par exemple je ne sais pas trop ce que ca peut donner.

De même pourquoi faire un GROUP BY sur autre chose que l'id ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 14h59   #13
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Bonjour Sabotage,
Voilà quand je fais la requête que tu m'as donné en premier j'arrive à cette erreur
Code :
ORA-00904: "CHANGEMENT" : identificateur non valide
Je change donc en mettant des ' ca me donne une autre erreur sur le "nom" de select
Code :
ORA-00979: N'est pas une expression GROUP BY
Je rajoute donc dans le group by le "nom" ainsi que le "prenom". Ensuite le système commence à travailler puis s'arrêtte avec une erreur sur le chiffre "1" dans having
Code :
ORA-01722: Nombre non valide
Voilà l'exposé de mes soucis.
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 15h08   #14
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Si ca ne marche pas comme ca, il faudra voir la syntaxe dans ta doc oracle.
Code :
1
2
3
4
5
SELECT nom, prenom, count(niveau) changement
FROM ma_table1
WHERE ANNEE = 2008 
GROUP BY id_utilisateur 
HAVING changement > 1
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 15h38   #15
Futur Membre du Club
 
Inscription : mai 2006
Messages : 74
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 74
Points : 15
Points : 15
Envoyer un message via MSN à guyanais
Re bonjour,

Même problème j'ai un soucis sur le nombre....
Code :
ORA-01722: Nombre non valide
guyanais est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 16h00   #16
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Si un oracleur pouvait passer ici

et comme ca ?
Code :
1
2
3
4
5
SELECT nom, prenom, count(*) changement
FROM ma_table1
WHERE ANNEE = 2008 
GROUP BY id_utilisateur 
HAVING changement > 1
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2008, 10h42   #17
Membre à l'essai
 
Inscription : octobre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 35
Points : 24
Points : 24
Peut tu donner ta requete et le message d'erreur qu'elle genère s'il te plait ? ça ne semble pas bien difficile pourtant (et la requete de sabotage a l'air complètement correcte, je ne vois pas où est le problème ?)
noxia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2008, 17h45   #18
Membre régulier
 
Développeur informatique
Inscription : juillet 2008
Messages : 171
Détails du profil
Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2008
Messages : 171
Points : 76
Points : 76
Envoyer un message via Yahoo à jeffray03
pourquoi ne pas mettre simplement
Code :
1
2
3
4
5
6
 
SELECT nom, prenom, count(*) As changement
FROM ma_table1
WHERE ANNEE = 2008 
GROUP BY id_utilisateur 
HAVING count(*) > 1
jeffray03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h42.


 
 
 
 
Partenaires

Hébergement Web