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

WinDev Discussion :

Regrouper deux requêtes en une


Sujet :

WinDev

  1. #41
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bon cette requete pourrais me convenir mais en faite çà ne liste pas les jeux qui ne sont pas dans planning

    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
     
    SELECT 
    	Jeux.IDJeux AS IDJeux,	
    	Jeux.Date_Debut_Jeu AS Date_Debut_Jeu,	
    	Jeux.Date_Fin_Jeu AS Date_Fin_Jeu,	
    	Planning.Date_Planning AS Date_Planning
    FROM 
    	Jeux RIGHT OUTER JOIN Planning ON Planning.IDJeux	=	Jeux.IDJeux
    WHERE 
    	(
     
    	(
    		Jeux.Date_Debut_Jeu >= {P_Date_Debut}
    		OR	Jeux.Date_Debut_Jeu <= {P_Date_Fin}
    	)
    	AND	
    	(
    		Jeux.Date_Fin_Jeu >= {P_Date_Debut}
    		OR	Jeux.Date_Fin_Jeu <= {P_Date_Fin}
    	)
    )
    ORDER BY 
    	Date_Planning ASC

  2. #42
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Il faut inverser la jointure:
    Jeux left outer join Planning

    Par rapport à une question posée plus haut: J'ai mis un DISTINCT dans la requête pour virer les doublons, si pour une ligne de jeux le moteur trouve deux lignes de Planning qui correspondent. Un Group By n'est utile qu'avec une fonction d'aggrégation (sum, avg...) ou un count().

    Tatayo.

  3. #43
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Il faut inverser la jointure:
    Jeux left outer join Planning

    Par rapport à une question posée plus haut: J'ai mis un DISTINCT dans la requête pour virer les doublons, si pour une ligne de jeux le moteur trouve deux lignes de Planning qui correspondent. Un Group By n'est utile qu'avec une fonction d'aggrégation (sum, avg...) ou un count().

    Tatayo.
    Il me change automatiquement :

    Jeux LEFT OUTER JOIN Planning ON planning.idjeux = jeux.idjeux

    en :

    Planning RIGHT OUTER JOIN Jeux ON Jeux.IDJeux = Planning.IDJeux

    lors de la retro-analyse pffff

  4. #44
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    J'ai réussi !

    J'ai modifié l'ordre dans l’éditeur de liaisons/jointures et coché : Inclure également une ligne par "Jeux" qui n'a pas de "Planning" et çà fonctionne



    Avec comme requête :

    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
     
    SELECT 
    	Jeux.IDJeux AS IDJeux,	
    	Jeux.Date_Debut_Jeu AS Date_Debut_Jeu,	
    	Jeux.Date_Fin_Jeu AS Date_Fin_Jeu,	
    	Planning.Date_Planning AS Date_Planning
    FROM 
    	Jeux FULL OUTER JOIN Planning ON Planning.IDJeux	=	Jeux.IDJeux
    WHERE 
    	(
     
    	(
    		Jeux.Date_Debut_Jeu >= {P_Date_Debut}
    		OR	Jeux.Date_Debut_Jeu <= {P_Date_Fin}
    	)
    	AND	
    	(
    		Jeux.Date_Fin_Jeu >= {P_Date_Debut}
    		OR	Jeux.Date_Fin_Jeu <= {P_Date_Fin}
    	)
    )
    ORDER BY 
    	Date_Planning ASC
    Merci pour votre aide précieuse

  5. #45
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Il est vraiment bizarre cet éditeur de requête: utiliser un FULL OUTER JOIN, et ajouter des restrictions dans la clause WHERE pour en faire un LEFT OUTER JOIN...
    Sinon je note que dans la requête il n'y a pas de restriction sur la date de Planning. Donc la requête serait susceptible de renvoyer une date de planning en 2012 pour un jeu en 2013.

    Tatayo.

  6. #46
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Sinon je note que dans la requête il n'y a pas de restriction sur la date de Planning. Donc la requête serait susceptible de renvoyer une date de planning en 2012 pour un jeu en 2013.

    Tatayo.
    Je vais tester avec un planning en 2012 mais tu es-sur ?

    Car dans les paramètres de la requête, je donne bien des dates complètes avec l'année, donc il me cherche les jeux compris entre ses 2 dates et après renvoi si il y a des planning pour les jeux retournés logiquement... Non ?

  7. #47
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Je ne connais pas la logique de l'application qu'il y a derrière, mais je voulais juste relever le fait qu'il n'y a pas de restriction sur l'année pour la table planning.
    Mais c'est peut-être normal ?

    Tatayo.

  8. #48
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Effectivement si il y une mauvaise dans la base de données en 2012 ou autre par exemple, la requête renvoi cette date tout de même car elle est attribué au jeux mais j'ai en amont une sécurité qui ne permettra pas d'ajouter de planning hors les bornes début/fin du jeu.

    Par contre, j'aimerais savoir une nouvelle choses pour ma requête histoire de la corser un peu...

    Je vous explique ce que je souhaite avoir au final :

    J'ai un champ calendrier, dans ce calendrier le souhaite attribuer une couleur de fond à chaque jour selon le contenu de ma base de données.

    - Blanc initial > Si il n'y a aucun jeu à planifier et si il n'y a aucun jeu planifié ce jour là.

    - Jaune > Si il y a au moins un jeu à planifier ce jour là

    - Vert > Si tous les jeux à planifier ce jour, le sont !

    Mon problème se pose lorsqu'il y a un jeu planifié et un jeu restant à planifier un jour précis, j'aimerais donc qu'il soit pas vert mais jaune ! Car il reste un jeu à planifier... vous voyez ?

    Ou alors c'est peut-être coté code qu'il faut le gérer mais je patauge aussi :s


    Voici comment je rempli mon tableau qui va ensuite colorer le champ calendrier :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    IDJeux est un entier
    SI HExécuteRequête(REQ_Planning_Test, hRequêteDéfaut, Date_Premier_Jour, Date_Dernier_Jour) = Vrai ALORS
    	POUR TOUT REQ_Planning_Test
    		POUR i_date = DateVersEntier(Date_Premier_Jour) _A_ DateVersEntier(Date_Dernier_Jour)
    			Indice_Date = TableauCherche(Tableau_Planning_Calendrier, tcLinéaire, "Date_Calendrier", EntierVersDate(i_date))
    			SI Indice_Date <> -1 ALORS
    				SI REQ_Planning_Test.Retour_Planning = 0 ALORS
    					// JEU NON PLANIFIE
    					SI (i_date >= DateVersEntier(REQ_Planning_Test.Date_Debut_Jeu)) ET (i_date <= DateVersEntier(REQ_Planning_Test.Date_Fin_Jeu)) ALORS
    						SI DateDifférence(EntierVersDate(i_date), Date_Actuelle) < 0 ALORS
    							Tableau_Planning_Calendrier[Indice_Date]:p_Type = 1
    						SINON
    							Tableau_Planning_Calendrier[Indice_Date]:p_Type = -1
    						FIN
    					FIN
    				SINON
    					SI (IDJeux <> REQ_Planning_Test.IDJeux) ALORS
    						SI (i_date >= DateVersEntier(REQ_Planning_Test.Date_Debut_Jeu)) ET (i_date <= DateVersEntier(REQ_Planning_Test.Date_Fin_Jeu)) ALORS
    							SI DateDifférence(EntierVersDate(i_date), Date_Actuelle) < 0 ALORS
    								Tableau_Planning_Calendrier[Indice_Date]:p_Type = 1
    							SINON
    								Tableau_Planning_Calendrier[Indice_Date]:p_Type = -1
    							FIN
    						FIN
    					FIN
    				FIN
    			FIN
    		FIN
    		IDJeux = REQ_Planning_Test.IDJeux
    	FIN
     
    	POUR TOUT REQ_Planning_Test
    		POUR i_date = DateVersEntier(Date_Premier_Jour) _A_ DateVersEntier(Date_Dernier_Jour)
    			Indice_Date = TableauCherche(Tableau_Planning_Calendrier, tcLinéaire, "Date_Calendrier", EntierVersDate(i_date))
    			SI Indice_Date <> -1 ALORS
    				SI REQ_Planning_Test.Retour_Planning <> 0 ALORS
    					// JEU PLANIFIE
    					SI REQ_Planning_Test.Date_Planning = EntierVersDate(i_date) ALORS
    						SI DateDifférence(EntierVersDate(i_date), Date_Actuelle) < 0 ALORS
    							Tableau_Planning_Calendrier[Indice_Date]:p_Type = 2
    						SINON
    							Tableau_Planning_Calendrier[Indice_Date]:p_Type = -2
    						FIN
    					FIN
    				FIN
    			FIN
    		FIN
    	FIN
    FIN
    HLibèreRequête(REQ_Planning_Test)
    Le code n'est pas du tout optimisé pour l'instant mais donc dans un premier temps, il rempli dans le tableau les jeux non planifiés et ceux planifié mais en prenant que la date de début de ceux-ci pour déjà récupérer tous les jours possibles à la planification et ensuite dans la seconde boucle POUR TOUT REQ_Planninf_Test on va attribuer un 2 ou -2 dans le tableau sur les dates ou les jeux sont planifié mais là sans prendre en compte si il peux y avoir d'autres planifications d'autres jeux...

    C'est pas évident à faire comprendre punaise... et je suis pas hyper bon pour expliquer vous voyez un peu ?

    Merci

Discussions similaires

  1. Requête regroupant deux lignes sur une colonne
    Par majo59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/08/2012, 10h05
  2. Somme de deux requête en une en sql/access
    Par thepunky89 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/09/2007, 14h31
  3. Regrouper plusieurs requêtes en une seule?
    Par kabkab dans le forum Requêtes
    Réponses: 12
    Dernier message: 28/07/2007, 11h54
  4. [SQL Server 8] Regrouper 2 requêtes en une ?
    Par Baquardie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/06/2004, 22h22
  5. Regrouper 3 requêtes dans une seule
    Par LadyArwen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2003, 09h32

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