Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 27/05/2008, 20h31   #1
Débutant
 
Inscription : septembre 2007
Messages : 372
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 372
Points : 53
Points : 53
Par défaut Problème requête Oracle

Bonjour, dans une table, j'ai des date de pointage, j'ai essayé de regrouper ces pointages par semaine et j'ai calculé le cumul d'heure de chaque semaine, chque pointage peut etre valide ou non valide, si tout les pointage sont valide alors la semaine est valide j'ai mis la requete suivante qui marche avec succés mais j'ai un problème :

Code :
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
30
31
32
33
ResultSet rs=session.connection().createStatement().executeQuery("select NUM_SEMAINE, DEBUT_SEMAINE," +
				" FIN_SEMAINE,ID_RESSOURCE,sum(DUREETACHE)as cum, count(distinct STATUT) as lg from GPL_POINTAGES " +
				"group by NUM_SEMAINE, DEBUT_SEMAINE,FIN_SEMAINE,ID_RESSOURCE having ID_RESSOURCE="+idr);
		GregorianCalendar c = new GregorianCalendar(Locale.FRANCE);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
 
		while(rs.next()){
			CumulPointage cp =new CumulPointage();
			cp.setNumSemaine(rs.getInt("NUM_SEMAINE"));
			cp.setCumul(rs.getInt("cum"));
 
			cp.setIdRessource(idr);
 
			IF((rs.getInt("lg")==1) ){
				cp.setStatut("Valide");
			}
			else cp.setStatut("Non Valide");
		    cp.setDds(rs.getDate("DEBUT_SEMAINE"));
 
		    c.setTime(cp.getDds());
		    int year = c.get(Calendar.YEAR);
		    cp.setAnnee(year);
		    cp.setDonnee(cp.getNumSemaine()+"/"+cp.getAnnee());
		    cp.setDfs(rs.getDate("FIN_SEMAINE"));
 
		    list.ADD(cp);
		}
	   }
	   catch (Exception e) {
		e.printStackTrace();
	}
		RETURN list;	
	}
la je teste si le lg est egal à 1 je met la semaine a valide sinon a non valide,
mais le problème c'est que le lg peut avoir la valeur 1 mais tout les pointage sont à non valide, vous avez une idée ?
newmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 07h45   #2
Futur Membre du Club
 
Inscription : mars 2008
Messages : 18
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mars 2008
Messages : 18
Points : 19
Points : 19
Suggestion : revenir à la bonne vieille théorie des ensembles.

Premier ensemble : tous les couples semaine/ressource
Code :
1
2
3
4
 
SELECT DISTINCT num_semaine , id_ressource
FROM GPL_POINTAGES
WHERE id_ressource = :idr ;
Second ensemble : les couples semaine/ressource qui possèdent (au moins) un pointage non valide
Code :
1
2
3
4
5
 
SELECT DISTINCT num_semaine , id_ressource
FROM GPL_POINTAGES
WHERE statut <> 'VALIDE'  -- vérifier la valeur hardcodee
AND   id_ressource = :idr ;
--> Solution : Différence entre le premier ensemble et le seconde ensemble = couples semaine/ressource qui possèdent uniquement des pointages valides.

Techniquement, j'essaierai en premier lieu
+ une query MINUS
+ une query basée sur les deux select avec un OUTER JOIN

Conseil : vérifier les plans d'exécution pour choisir la solution plus performante puisque cela dépend de ton environnement (index, population de la table, ...).
plalm 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 17h53.


 
 
 
 
Partenaires

Hébergement Web