Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

alias d'une table Access et jointure entre la table et son alias

3 réponses
Avatar
Michel Angelosanto
Bonjour,

Voici le problème:
dans une table Access , j'ai une colonne vendeur, une colonne mois, et une
colonne total des ventes

Je voudrais lister les vendeurs au dernier mois, avec le cumul des ventes et
le cumul des ventes du mois-1 (pour calculer par différence les ventes du
mois)

J'ai résolu ce problème sous Harry en créant une table alias table2
j'ai donc fait une requête dont le fonctionnement est le suivant
sélection des vendeurs de la table1 dont le mois est M
sélection des vendeurs de la table2 dont le mois est M-1
création d'une jointure table1.vendeur=table2.vendeur
colonne calculée ventes du mois= table1.cumul des ventes-table2.cumul des
ventes

Cette table est maintenant sous Access mais il semble qu'il ne supporte pas
un alias sur la même table?
Je ne voudrais pas faire une copie car cela tiendrait de la place et il
faudrait faire la copie chaque fois que la table est modifiée.
voici la ligne en erreur (sous Excel)
Set rs = cnn.Execute("Select nom,cumul,a.cumul from table1 as a join a on
nom=a.nom where semaine=2 and a.semaine=1")

Avez_vous une idée de l'erreur ?

merci d'avance.

--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/

3 réponses

Avatar
Michel Angelosanto
J'ai trouvé mais il reste un problème à résoudre:
un nouveau vendeur à un total des ventes au mois M mais il n'y a pas
d'enregistrement au mois M-1 donc la requete ne sort rien pour ce vendeur.
Je voudrais que si le mois M-1 pour ce vendeur est NULL, obtenir tout de
même un enregistrement avec mois M - 0

voici ma solution en attendant de trouver mieux cela va surement vous donner
une idée?
Dim t As Integer, c$
Dim nom1 As String, semaine1 As Integer, cumul1 As Integer, hebdo1 As
Integer
Dim cnn As ADODB.Connection
Dim cnn1 As ADODB.Connection
Sub Connexion()
'Microsoft ActivexDataObject 2.8 Library
ChDir ActiveWorkbook.Path
Dim rs As ADODB.Recordset
Dim rs1 As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:temptest1.mdb"
Set cnn1 = New ADODB.Connection
cnn1.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:temptest1.mdb"
Set rs = cnn.Execute("Select a.nom as nom1,a.cumul as cumul1,a.semaine as
semaine1,b.cumul as cumul2 from (select nom,cumul,semaine from table1 where
semaine=2) _
as a inner join (select nom,cumul,semaine from table1 where
semaine=1) as b on a.nom=b.nom where a.semaine=2")
rs.MoveFirst
t = 1
While Not rs.EOF
nom1 = rs!nom1
semaine1 = rs!semaine1
cumul1 = rs!cumul1
hebdo1 = cumul1 - rs!cumul2
'je mets le résultat dans la feuille courante
Cells(t, 1) = nom1
Cells(t, 2) = semaine1
Cells(t, 3) = cumul1
Cells(t, 4) = hebdo1
t = t + 1
rs.MoveNext
Wend
End Sub


"Michel Angelosanto" a écrit dans le message de
news:
Bonjour,

Voici le problème:
dans une table Access , j'ai une colonne vendeur, une colonne mois, et une
colonne total des ventes

Je voudrais lister les vendeurs au dernier mois, avec le cumul des ventes
et le cumul des ventes du mois-1 (pour calculer par différence les ventes
du mois)

J'ai résolu ce problème sous Harry en créant une table alias table2
j'ai donc fait une requête dont le fonctionnement est le suivant
sélection des vendeurs de la table1 dont le mois est M
sélection des vendeurs de la table2 dont le mois est M-1
création d'une jointure table1.vendeur=table2.vendeur
colonne calculée ventes du mois= table1.cumul des ventes-table2.cumul des
ventes

Cette table est maintenant sous Access mais il semble qu'il ne supporte
pas un alias sur la même table?
Je ne voudrais pas faire une copie car cela tiendrait de la place et il
faudrait faire la copie chaque fois que la table est modifiée.
voici la ligne en erreur (sous Excel)
Set rs = cnn.Execute("Select nom,cumul,a.cumul from table1 as a join a on
nom=a.nom where semaine=2 and a.semaine=1")

Avez_vous une idée de l'erreur ?

merci d'avance.

--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/



--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/
Avatar
Michel Angelosanto
J'ai fini par trouver, bon dimanche.
Voici la solution finale en VBA sous Excel

Option Explicit
Dim t As Integer, c$
Dim nom1 As String, semaine1 As Integer, cumul1 As Integer, hebdo1 As
Integer
Dim cnn As ADODB.Connection
Dim cnn1 As ADODB.Connection
Sub Connexion()
'Microsoft ActivexDataObject 2.8 Library
ChDir ActiveWorkbook.Path
Dim rs As ADODB.Recordset
Dim rs1 As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:temptest1.mdb"
Set cnn1 = New ADODB.Connection
cnn1.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:temptest1.mdb"
Set rs = cnn.Execute("Select a.nom as nom1,a.cumul as cumul1,a.semaine as
semaine1,b.cumul as cumul2 from (select nom,cumul,semaine from table1 where
semaine=2) as a left outer join (select nom,cumul,semaine from table1 where
semaine=1) as b on a.nom=b.nom where a.semaine=2")
rs.MoveFirst
t = 1
While Not rs.EOF
nom1 = rs!nom1
semaine1 = rs!semaine1
cumul1 = rs!cumul1
If IsNull(rs!cumul2) Then
hebdo1 = cumul1
Else
hebdo1 = cumul1 - rs!cumul2
End If
Cells(t, 1) = nom1
Cells(t, 2) = semaine1
Cells(t, 3) = cumul1
Cells(t, 4) = hebdo1
t = t + 1
rs.MoveNext
Wend
End Sub

"Michel Angelosanto, Bordeaux
http://angelosa.free.fr/
Avatar
CErnst
Pour celà, il faut partir de la table des vendeurs à laquelle il faut
joindre les deux requêtes sous forme de jointure gauche
(tous les enregistrements de la table des vendeurs et les enregistements
egaux des autres reqêtes) puis limiter aux enregistrements qui ont une
valeur soit dans cumul1 soit dans cumul2


"Michel Angelosanto" a écrit dans le message de news:

J'ai trouvé mais il reste un problème à résoudre:
un nouveau vendeur à un total des ventes au mois M mais il n'y a pas
d'enregistrement au mois M-1 donc la requete ne sort rien pour ce vendeur.
Je voudrais que si le mois M-1 pour ce vendeur est NULL, obtenir tout de
même un enregistrement avec mois M - 0

voici ma solution en attendant de trouver mieux cela va surement vous
donner une idée?
Dim t As Integer, c$
Dim nom1 As String, semaine1 As Integer, cumul1 As Integer, hebdo1 As
Integer
Dim cnn As ADODB.Connection
Dim cnn1 As ADODB.Connection
Sub Connexion()
'Microsoft ActivexDataObject 2.8 Library
ChDir ActiveWorkbook.Path
Dim rs As ADODB.Recordset
Dim rs1 As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:temptest1.mdb"
Set cnn1 = New ADODB.Connection
cnn1.Open "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=c:temptest1.mdb"
Set rs = cnn.Execute("Select a.nom as nom1,a.cumul as cumul1,a.semaine as
semaine1,b.cumul as cumul2 from (select nom,cumul,semaine from table1
where semaine=2) _
as a inner join (select nom,cumul,semaine from table1 where
semaine=1) as b on a.nom=b.nom where a.semaine=2")
rs.MoveFirst
t = 1
While Not rs.EOF
nom1 = rs!nom1
semaine1 = rs!semaine1
cumul1 = rs!cumul1
hebdo1 = cumul1 - rs!cumul2
'je mets le résultat dans la feuille courante
Cells(t, 1) = nom1
Cells(t, 2) = semaine1
Cells(t, 3) = cumul1
Cells(t, 4) = hebdo1
t = t + 1
rs.MoveNext
Wend
End Sub


"Michel Angelosanto" a écrit dans le message de
news:
Bonjour,

Voici le problème:
dans une table Access , j'ai une colonne vendeur, une colonne mois, et
une colonne total des ventes

Je voudrais lister les vendeurs au dernier mois, avec le cumul des ventes
et le cumul des ventes du mois-1 (pour calculer par différence les ventes
du mois)

J'ai résolu ce problème sous Harry en créant une table alias table2
j'ai donc fait une requête dont le fonctionnement est le suivant
sélection des vendeurs de la table1 dont le mois est M
sélection des vendeurs de la table2 dont le mois est M-1
création d'une jointure table1.vendeur=table2.vendeur
colonne calculée ventes du mois= table1.cumul des ventes-table2.cumul des
ventes

Cette table est maintenant sous Access mais il semble qu'il ne supporte
pas un alias sur la même table?
Je ne voudrais pas faire une copie car cela tiendrait de la place et il
faudrait faire la copie chaque fois que la table est modifiée.
voici la ligne en erreur (sous Excel)
Set rs = cnn.Execute("Select nom,cumul,a.cumul from table1 as a join a on
nom=a.nom where semaine=2 and a.semaine=1")

Avez_vous une idée de l'erreur ?

merci d'avance.

--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/



--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/