question requête

Le
Nicolas
Bonjour tout le monde,

J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
Voila disons que j'ai une table T_Planning, avec un champ nomEmploye et un
champ datePlanning.
T_Planning(nomEmploye,datePlanning)
Dans cette table il ne peut y avoir que un enregistrement par jour pour un
employé et c'est la que le bas blesse il peut que pour une date donnée
l'employé n'est pas d'enregistrement.
Or dans ma requete je vourdrais obtenir chaque jour du mois même ceux qui
n'existe pas dans la table.
Un exemple:
Contenu de ma table :

Dupont 01/02/2004
Dupont 03/02/2004
Dupont 08/02/2004
Dupont 29/02/2004

=>4 enregistrements pour le mois de février 2004 pour dupont

Je voudrais obtenir avec ma requete le jeu d'enregistrement suivant:
Dupont 01/02/2004
Dupont 02/02/2004
Dupont 03/02/2004
Dupont 04/02/2004
Dupont 05/02/2004
Dupont 06/02/2004
Dupont 07/02/2004
Dupont 08/02/2004

Dupont 29/02/2004

=>29 enregistrements pour le mois de février 2004 pour dupont

Existe-il une astuce pour faire ceci ?????
Merci de votre aide.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice Scribe
Le #11724071
Généralement, on utilise dans ce cas une table "calendrier" qui contient
toutes les dates voulues et il ne reste qu'à faire la jointure...

Patrice

--

"Nicolas" news:e%
Bonjour tout le monde,

J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
Voila disons que j'ai une table T_Planning, avec un champ nomEmploye et un
champ datePlanning.
T_Planning(nomEmploye,datePlanning)
Dans cette table il ne peut y avoir que un enregistrement par jour pour un
employé et c'est la que le bas blesse il peut que pour une date donnée
l'employé n'est pas d'enregistrement.
Or dans ma requete je vourdrais obtenir chaque jour du mois même ceux qui
n'existe pas dans la table.
Un exemple:
Contenu de ma table :

Dupont 01/02/2004
Dupont 03/02/2004
Dupont 08/02/2004
Dupont 29/02/2004

=>4 enregistrements pour le mois de février 2004 pour dupont

Je voudrais obtenir avec ma requete le jeu d'enregistrement suivant:
Dupont 01/02/2004
Dupont 02/02/2004
Dupont 03/02/2004
Dupont 04/02/2004
Dupont 05/02/2004
Dupont 06/02/2004
Dupont 07/02/2004
Dupont 08/02/2004
...
Dupont 29/02/2004

=>29 enregistrements pour le mois de février 2004 pour dupont

Existe-il une astuce pour faire ceci ?????
Merci de votre aide.





Nicolas
Le #11724061
Oui c'est exactement ce que j'ai fait, merci
J'ai donc créé une table T_calendrier contenant tous les jours du mois
désiré et il m'a suffit de faire une jointure (left outter join) avec ma
table T_Planning.
Le seul hic est que dans ma table T_Planning les champs nomEmploye et
datePlanning sont tous les deux la clés primaires de ma table.
Je suis donc obligé de faire ceci :

SELECT *
FROM T_calendrier LEFT OUTER JOIN
T_T_Planning ON T_calendrier.dateJour = T_Planning
.datePlanning AND T_Planning .nomEmploye = "Dupont"
ORDER BY T_calendrier.dateJour

Comment faire si je veux faire la même chose sur tout mes employés ?

Merci



"Patrice Scribe" news:%
Généralement, on utilise dans ce cas une table "calendrier" qui contient
toutes les dates voulues et il ne reste qu'à faire la jointure...

Patrice

--

"Nicolas" news:e%
> Bonjour tout le monde,
>
> J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
> Voila disons que j'ai une table T_Planning, avec un champ nomEmploye et


un
> champ datePlanning.
> T_Planning(nomEmploye,datePlanning)
> Dans cette table il ne peut y avoir que un enregistrement par jour pour


un
> employé et c'est la que le bas blesse il peut que pour une date donnée
> l'employé n'est pas d'enregistrement.
> Or dans ma requete je vourdrais obtenir chaque jour du mois même ceux


qui
> n'existe pas dans la table.
> Un exemple:
> Contenu de ma table :
>
> Dupont 01/02/2004
> Dupont 03/02/2004
> Dupont 08/02/2004
> Dupont 29/02/2004
>
> =>4 enregistrements pour le mois de février 2004 pour dupont
>
> Je voudrais obtenir avec ma requete le jeu d'enregistrement suivant:
> Dupont 01/02/2004
> Dupont 02/02/2004
> Dupont 03/02/2004
> Dupont 04/02/2004
> Dupont 05/02/2004
> Dupont 06/02/2004
> Dupont 07/02/2004
> Dupont 08/02/2004
> ...
> Dupont 29/02/2004
>
> =>29 enregistrements pour le mois de février 2004 pour dupont
>
> Existe-il une astuce pour faire ceci ?????
> Merci de votre aide.
>
>
>



Patrice Scribe
Le #11724051
Tu peux ne joindre que sur la date ce qui te donnera tous les employés
concernés par une journée :

SELECT *
FROM T_calendrier LEFT OUTER JOIN
T_T_Planning ON T_calendrier.dateJour T_Planning.datePlanning
ORDER BY T_calendrier.dateJour,T_planning.nomEmployee

Est-ce que tu veux ?

--

"Nicolas" news:
Oui c'est exactement ce que j'ai fait, merci
J'ai donc créé une table T_calendrier contenant tous les jours du mois
désiré et il m'a suffit de faire une jointure (left outter join) avec ma
table T_Planning.
Le seul hic est que dans ma table T_Planning les champs nomEmploye et
datePlanning sont tous les deux la clés primaires de ma table.
Je suis donc obligé de faire ceci :

SELECT *
FROM T_calendrier LEFT OUTER JOIN
T_T_Planning ON T_calendrier.dateJour = T_Planning
.datePlanning AND T_Planning .nomEmploye = "Dupont"
ORDER BY T_calendrier.dateJour

Comment faire si je veux faire la même chose sur tout mes employés ?

Merci



"Patrice Scribe" news:%
> Généralement, on utilise dans ce cas une table "calendrier" qui contient
> toutes les dates voulues et il ne reste qu'à faire la jointure...
>
> Patrice
>
> --
>
> "Nicolas" > news:e%
> > Bonjour tout le monde,
> >
> > J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
> > Voila disons que j'ai une table T_Planning, avec un champ nomEmploye


et
un
> > champ datePlanning.
> > T_Planning(nomEmploye,datePlanning)
> > Dans cette table il ne peut y avoir que un enregistrement par jour


pour
un
> > employé et c'est la que le bas blesse il peut que pour une date donnée
> > l'employé n'est pas d'enregistrement.
> > Or dans ma requete je vourdrais obtenir chaque jour du mois même ceux
qui
> > n'existe pas dans la table.
> > Un exemple:
> > Contenu de ma table :
> >
> > Dupont 01/02/2004
> > Dupont 03/02/2004
> > Dupont 08/02/2004
> > Dupont 29/02/2004
> >
> > =>4 enregistrements pour le mois de février 2004 pour dupont
> >
> > Je voudrais obtenir avec ma requete le jeu d'enregistrement suivant:
> > Dupont 01/02/2004
> > Dupont 02/02/2004
> > Dupont 03/02/2004
> > Dupont 04/02/2004
> > Dupont 05/02/2004
> > Dupont 06/02/2004
> > Dupont 07/02/2004
> > Dupont 08/02/2004
> > ...
> > Dupont 29/02/2004
> >
> > =>29 enregistrements pour le mois de février 2004 pour dupont
> >
> > Existe-il une astuce pour faire ceci ?????
> > Merci de votre aide.
> >
> >
> >
>




Nicolas
Le #11724041
Oui mais cette requete ne marche pas, j'ai deja essayé comme ca.
Il ne prend pas en compte le left outer join, il le considere comme un inner
join





"Patrice Scribe" news:%
Tu peux ne joindre que sur la date ce qui te donnera tous les employés
concernés par une journée :

SELECT *
FROM T_calendrier LEFT OUTER JOIN
T_T_Planning ON T_calendrier.dateJour > T_Planning.datePlanning
ORDER BY T_calendrier.dateJour,T_planning.nomEmployee

Est-ce que tu veux ?

--

"Nicolas" news:
> Oui c'est exactement ce que j'ai fait, merci
> J'ai donc créé une table T_calendrier contenant tous les jours du mois
> désiré et il m'a suffit de faire une jointure (left outter join) avec ma
> table T_Planning.
> Le seul hic est que dans ma table T_Planning les champs nomEmploye et
> datePlanning sont tous les deux la clés primaires de ma table.
> Je suis donc obligé de faire ceci :
>
> SELECT *
> FROM T_calendrier LEFT OUTER JOIN
> T_T_Planning ON T_calendrier.dateJour = T_Planning
> .datePlanning AND T_Planning .nomEmploye = "Dupont"
> ORDER BY T_calendrier.dateJour
>
> Comment faire si je veux faire la même chose sur tout mes employés ?
>
> Merci
>
>
>
> "Patrice Scribe" > news:%
> > Généralement, on utilise dans ce cas une table "calendrier" qui


contient
> > toutes les dates voulues et il ne reste qu'à faire la jointure...
> >
> > Patrice
> >
> > --
> >
> > "Nicolas" > > news:e%
> > > Bonjour tout le monde,
> > >
> > > J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
> > > Voila disons que j'ai une table T_Planning, avec un champ nomEmploye
et
> un
> > > champ datePlanning.
> > > T_Planning(nomEmploye,datePlanning)
> > > Dans cette table il ne peut y avoir que un enregistrement par jour
pour
> un
> > > employé et c'est la que le bas blesse il peut que pour une date


donnée
> > > l'employé n'est pas d'enregistrement.
> > > Or dans ma requete je vourdrais obtenir chaque jour du mois même


ceux
> qui
> > > n'existe pas dans la table.
> > > Un exemple:
> > > Contenu de ma table :
> > >
> > > Dupont 01/02/2004
> > > Dupont 03/02/2004
> > > Dupont 08/02/2004
> > > Dupont 29/02/2004
> > >
> > > =>4 enregistrements pour le mois de février 2004 pour dupont
> > >
> > > Je voudrais obtenir avec ma requete le jeu d'enregistrement suivant:
> > > Dupont 01/02/2004
> > > Dupont 02/02/2004
> > > Dupont 03/02/2004
> > > Dupont 04/02/2004
> > > Dupont 05/02/2004
> > > Dupont 06/02/2004
> > > Dupont 07/02/2004
> > > Dupont 08/02/2004
> > > ...
> > > Dupont 29/02/2004
> > >
> > > =>29 enregistrements pour le mois de février 2004 pour dupont
> > >
> > > Existe-il une astuce pour faire ceci ?????
> > > Merci de votre aide.
> > >
> > >
> > >
> >
>
>



Patrice Scribe
Le #11724031
Tu n'aurais pas des dates qui ne sont pas identiques ? Le code ci-dessous
semble ok...

create table T_Calendrier(Jour SMALLDATETIME)
CREATE TABLE T_Planning(Jour SMALLDATETIME,Qui VARCHAR(10))
GO
INSERT INTO T_Calendrier VALUES ('20040101')
INSERT INTO T_Calendrier VALUES ('20040102')
INSERT INTO T_Calendrier VALUES ('20040103')
INSERT INTO T_Calendrier VALUES ('20040104')

INSERT INTO T_Planning VALUES ('20040101','Moi')
INSERT INTO T_Planning VALUES ('20040103','Moi')
INSERT INTO T_Planning VALUES ('20040103','Elle')
INSERT INTO T_Planning VALUES ('20040103','Lui')
INSERT INTO T_Planning VALUES ('20040104','Eux')
GO
SELECT * FROM T_Calendrier
LEFT OUTER JOIN T_Planning ON T_Planning.Jour=T_Calendrier.Jour

me donne bien :

Jour Jour
Qui
------------------------------------------------------ ---------------------
--------------------------------- ----------
2004-01-01 00:00:00 2004-01-01 00:00:00
Moi
2004-01-02 00:00:00 NULL
NULL
2004-01-03 00:00:00 2004-01-03 00:00:00
Moi
2004-01-03 00:00:00 2004-01-03 00:00:00
Elle
2004-01-03 00:00:00 2004-01-03 00:00:00
Lui
2004-01-04 00:00:00 2004-01-04 00:00:00
Eux

--

"Nicolas" news:
Oui mais cette requete ne marche pas, j'ai deja essayé comme ca.
Il ne prend pas en compte le left outer join, il le considere comme un


inner
join





"Patrice Scribe" news:%
> Tu peux ne joindre que sur la date ce qui te donnera tous les employés
> concernés par une journée :
>
> SELECT *
> FROM T_calendrier LEFT OUTER JOIN
> T_T_Planning ON T_calendrier.dateJour > > T_Planning.datePlanning
> ORDER BY T_calendrier.dateJour,T_planning.nomEmployee
>
> Est-ce que tu veux ?
>
> --
>
> "Nicolas" > news:
> > Oui c'est exactement ce que j'ai fait, merci
> > J'ai donc créé une table T_calendrier contenant tous les jours du mois
> > désiré et il m'a suffit de faire une jointure (left outter join) avec


ma
> > table T_Planning.
> > Le seul hic est que dans ma table T_Planning les champs nomEmploye et
> > datePlanning sont tous les deux la clés primaires de ma table.
> > Je suis donc obligé de faire ceci :
> >
> > SELECT *
> > FROM T_calendrier LEFT OUTER JOIN
> > T_T_Planning ON T_calendrier.dateJour T_Planning
> > .datePlanning AND T_Planning .nomEmploye = "Dupont"
> > ORDER BY T_calendrier.dateJour
> >
> > Comment faire si je veux faire la même chose sur tout mes employés ?
> >
> > Merci
> >
> >
> >
> > "Patrice Scribe" > > news:%
> > > Généralement, on utilise dans ce cas une table "calendrier" qui
contient
> > > toutes les dates voulues et il ne reste qu'à faire la jointure...
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Nicolas" > > > news:e%
> > > > Bonjour tout le monde,
> > > >
> > > > J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
> > > > Voila disons que j'ai une table T_Planning, avec un champ


nomEmploye
> et
> > un
> > > > champ datePlanning.
> > > > T_Planning(nomEmploye,datePlanning)
> > > > Dans cette table il ne peut y avoir que un enregistrement par jour
> pour
> > un
> > > > employé et c'est la que le bas blesse il peut que pour une date
donnée
> > > > l'employé n'est pas d'enregistrement.
> > > > Or dans ma requete je vourdrais obtenir chaque jour du mois même
ceux
> > qui
> > > > n'existe pas dans la table.
> > > > Un exemple:
> > > > Contenu de ma table :
> > > >
> > > > Dupont 01/02/2004
> > > > Dupont 03/02/2004
> > > > Dupont 08/02/2004
> > > > Dupont 29/02/2004
> > > >
> > > > =>4 enregistrements pour le mois de février 2004 pour dupont
> > > >
> > > > Je voudrais obtenir avec ma requete le jeu d'enregistrement


suivant:
> > > > Dupont 01/02/2004
> > > > Dupont 02/02/2004
> > > > Dupont 03/02/2004
> > > > Dupont 04/02/2004
> > > > Dupont 05/02/2004
> > > > Dupont 06/02/2004
> > > > Dupont 07/02/2004
> > > > Dupont 08/02/2004
> > > > ...
> > > > Dupont 29/02/2004
> > > >
> > > > =>29 enregistrements pour le mois de février 2004 pour dupont
> > > >
> > > > Existe-il une astuce pour faire ceci ?????
> > > > Merci de votre aide.
> > > >
> > > >
> > > >
> > >
> >
> >
>




Nicolas
Le #11724021
Ton code marche bien effectivement !
En fait j'ai mal exprimé mon problème. Je voudrais que pour chaque "qui "
j'ai autant d'enregistrement qu'il y a dans la table T_calendrier. Ca donne
un truc du genre.

t_calendrier.jour qui
----------------- ----
01/01/2004 Moi
02/01/2004 Moi
03/01/2004 Moi
04/01/2004 Moi

01/01/2004 Lui
02/01/2004 Lui
03/01/2004 Lui
04/01/2004 Lui
01/01/2004 Elle
02/01/2004 Elle
03/01/2004 Elle
04/01/2004 Elle
01/01/2004 Eux
02/01/2004 Eux
03/01/2004 Eux
04/01/2004 Eux

Mais c'est bon, j'ai compris d'ou venait mon problème.
En tout cas je te remercie car c'est grace à toi que je me suis apperçu que
je faisai fausse route .


"Patrice Scribe" news:%
Tu n'aurais pas des dates qui ne sont pas identiques ? Le code ci-dessous
semble ok...

create table T_Calendrier(Jour SMALLDATETIME)
CREATE TABLE T_Planning(Jour SMALLDATETIME,Qui VARCHAR(10))
GO
INSERT INTO T_Calendrier VALUES ('20040101')
INSERT INTO T_Calendrier VALUES ('20040102')
INSERT INTO T_Calendrier VALUES ('20040103')
INSERT INTO T_Calendrier VALUES ('20040104')

INSERT INTO T_Planning VALUES ('20040101','Moi')
INSERT INTO T_Planning VALUES ('20040103','Moi')
INSERT INTO T_Planning VALUES ('20040103','Elle')
INSERT INTO T_Planning VALUES ('20040103','Lui')
INSERT INTO T_Planning VALUES ('20040104','Eux')
GO
SELECT * FROM T_Calendrier
LEFT OUTER JOIN T_Planning ON T_Planning.Jour=T_Calendrier.Jour

me donne bien :

Jour Jour
Qui
------------------------------------------------------ -------------------


--
--------------------------------- ----------
2004-01-01 00:00:00 2004-01-01 00:00:00
Moi
2004-01-02 00:00:00 NULL
NULL
2004-01-03 00:00:00 2004-01-03 00:00:00
Moi
2004-01-03 00:00:00 2004-01-03 00:00:00
Elle
2004-01-03 00:00:00 2004-01-03 00:00:00
Lui
2004-01-04 00:00:00 2004-01-04 00:00:00
Eux

--

"Nicolas" news:
> Oui mais cette requete ne marche pas, j'ai deja essayé comme ca.
> Il ne prend pas en compte le left outer join, il le considere comme un
inner
> join
>
>
>
>
>
> "Patrice Scribe" > news:%
> > Tu peux ne joindre que sur la date ce qui te donnera tous les employés
> > concernés par une journée :
> >
> > SELECT *
> > FROM T_calendrier LEFT OUTER JOIN
> > T_T_Planning ON T_calendrier.dateJour > > > T_Planning.datePlanning
> > ORDER BY T_calendrier.dateJour,T_planning.nomEmployee
> >
> > Est-ce que tu veux ?
> >
> > --
> >
> > "Nicolas" > > news:
> > > Oui c'est exactement ce que j'ai fait, merci
> > > J'ai donc créé une table T_calendrier contenant tous les jours du


mois
> > > désiré et il m'a suffit de faire une jointure (left outter join)


avec
ma
> > > table T_Planning.
> > > Le seul hic est que dans ma table T_Planning les champs nomEmploye


et
> > > datePlanning sont tous les deux la clés primaires de ma table.
> > > Je suis donc obligé de faire ceci :
> > >
> > > SELECT *
> > > FROM T_calendrier LEFT OUTER JOIN
> > > T_T_Planning ON T_calendrier.dateJour > T_Planning
> > > .datePlanning AND T_Planning .nomEmploye = "Dupont"
> > > ORDER BY T_calendrier.dateJour
> > >
> > > Comment faire si je veux faire la même chose sur tout mes employés ?
> > >
> > > Merci
> > >
> > >
> > >
> > > "Patrice Scribe" > > > news:%
> > > > Généralement, on utilise dans ce cas une table "calendrier" qui
> contient
> > > > toutes les dates voulues et il ne reste qu'à faire la jointure...
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Nicolas" > > > > news:e%
> > > > > Bonjour tout le monde,
> > > > >
> > > > > J'ai une requête à faire qui me chagrinne un peu (beaucoup même


!)
> > > > > Voila disons que j'ai une table T_Planning, avec un champ
nomEmploye
> > et
> > > un
> > > > > champ datePlanning.
> > > > > T_Planning(nomEmploye,datePlanning)
> > > > > Dans cette table il ne peut y avoir que un enregistrement par


jour
> > pour
> > > un
> > > > > employé et c'est la que le bas blesse il peut que pour une date
> donnée
> > > > > l'employé n'est pas d'enregistrement.
> > > > > Or dans ma requete je vourdrais obtenir chaque jour du mois même
> ceux
> > > qui
> > > > > n'existe pas dans la table.
> > > > > Un exemple:
> > > > > Contenu de ma table :
> > > > >
> > > > > Dupont 01/02/2004
> > > > > Dupont 03/02/2004
> > > > > Dupont 08/02/2004
> > > > > Dupont 29/02/2004
> > > > >
> > > > > =>4 enregistrements pour le mois de février 2004 pour dupont
> > > > >
> > > > > Je voudrais obtenir avec ma requete le jeu d'enregistrement
suivant:
> > > > > Dupont 01/02/2004
> > > > > Dupont 02/02/2004
> > > > > Dupont 03/02/2004
> > > > > Dupont 04/02/2004
> > > > > Dupont 05/02/2004
> > > > > Dupont 06/02/2004
> > > > > Dupont 07/02/2004
> > > > > Dupont 08/02/2004
> > > > > ...
> > > > > Dupont 29/02/2004
> > > > >
> > > > > =>29 enregistrements pour le mois de février 2004 pour dupont
> > > > >
> > > > > Existe-il une astuce pour faire ceci ?????
> > > > > Merci de votre aide.
> > > > >
> > > > >
> > > > >
> > > >
> > >
> > >
> >
>
>



Fred BROUARD
Le #11723991
SELECT *
FROM T_calendrier C
LEFT OUTER JOIN T_Planning P
ON C.dateJour = P.datePlanning
WHERE P.nomEmployee = 'toto' OR P.nomEmployee IS NULL
ORDER BY C.dateJour, P.nomEmployee

A +

Nicolas a écrit:
Bonjour tout le monde,

J'ai une requête à faire qui me chagrinne un peu (beaucoup même !)
Voila disons que j'ai une table T_Planning, avec un champ nomEmploye et un
champ datePlanning.
T_Planning(nomEmploye,datePlanning)
Dans cette table il ne peut y avoir que un enregistrement par jour pour un
employé et c'est la que le bas blesse il peut que pour une date donnée
l'employé n'est pas d'enregistrement.
Or dans ma requete je vourdrais obtenir chaque jour du mois même ceux qui
n'existe pas dans la table.
Un exemple:
Contenu de ma table :

Dupont 01/02/2004
Dupont 03/02/2004
Dupont 08/02/2004
Dupont 29/02/2004

=>4 enregistrements pour le mois de février 2004 pour dupont

Je voudrais obtenir avec ma requete le jeu d'enregistrement suivant:
Dupont 01/02/2004
Dupont 02/02/2004
Dupont 03/02/2004
Dupont 04/02/2004
Dupont 05/02/2004
Dupont 06/02/2004
Dupont 07/02/2004
Dupont 08/02/2004
...
Dupont 29/02/2004

=>29 enregistrements pour le mois de février 2004 pour dupont

Existe-il une astuce pour faire ceci ?????
Merci de votre aide.






--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Publicité
Poster une réponse
Anonyme