Requete avec différentes clés

cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
- Modifié par cs_ShayW le 2/07/2015 à 17:29
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
- 14 juil. 2015 à 17:22
Bonjour,



J'essai d'écrire une requete sans succès access vb.net


je possède de deux tables

Player et Results

Les champs de Player sont code Playercode - automatic number
Name - text


les champs de Results sont coderesult - automatic number
codeplayer1 - number
points1 - number
codeplayer2 - number
points2 - number

ex

Player
Playercode Name
100..........Toto
101......... Titi
102........ Tata


Result

coderesult codeplayer1 points1 codeplayer2 points2
1................ 100........... 10............ 102......... 23
2................. 101............ 34 ...........102......... 45
3 .................101............ 66 ............100......... 50
4................. 102............ 34 ............100......... 40

Le but donner la liste de tous les résultats de toto à fin d'obtenir

Joueur pts adversaire pts
Toto..... 10.......tata ..........23
Titi....... 66...... toto.......... 50
tata...... 34....... toto......... 40



Merci

2 réponses

yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
23
14 juil. 2015 à 16:38
Salut,

vu la structure de la table Result, il n'y a pas vraiment de solution élégante.
Mais tu paux faire un truc comme ça :

select 
	p.Name as joueur,
	r.points1 as pts,
	p2.Name as adversaire,
	r2.points2 as ptsa
from
	Player p 
	inner join Result r on p.PlayerCode = r.codePlayer1 
	inner join Result r2 on r2.coderesul = r.coderesul 
	inner join Player p2 on p2.PlayerCode = r2.codeplayer2
where
	r.codePlayer1 = 100 
	and r2.codeplayer2 <> 100 

union

select 
	p.Name as joueur,
	r.points1 as pts,
	p2.Name as adversaire,
	r2.points2 as ptsa
from
	Player p 
	inner join Result r on p.PlayerCode = r.codePlayer1
	inner join Result r2 on r2.coderesul = r.coderesul 
	inner join Player p2 on p2.PlayerCode = r2.codeplayer2
where
	r.codePlayer1 <> 100
	and r2.codeplayer2 = 100


Bye...
0
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
14 juil. 2015 à 17:22
Merci pour la réponse
mais pour l'instant j'ai modifié la table result et ajouter une table
Games
codegame - automatic number
dategame - date
data1 - number
data2 - number

Results
coderesult - automatic number
codeplayer1 - number
points1 - number
codegame number

pour chaque match joué entre deux joueurs j'enregistre dans la table Game ,obtiens le dernier codegame et enregistre les deux joueurs dans la table Result avec le même codegame

pour obtenir les résultats selon un joueur
Dim command As New OleDbCommand
Dim recordset As OleDbDataReader
Dim codeplayer As Integer
recordset = Nothing
command.Connection = Connection
codeplayer = GetCodePlayer(FamillyName)
command.CommandText = "SELECT Player.Name ,Results.points1, Games.data1, Games.data2, Games.dategame "
command.CommandText &= "FROM Player ,Results , Games WHERE Player.Playercode = Results.playercode AND Results.codegame = Games.Codegame AND Games.Codegame IN ( SELECT Codegame FROM Results WHERE playercode = [?] ) ; "
command.Parameters.Add("?", OleDbType.Integer).Value = codeplayer
recordset = command.ExecuteReader()
Return recordset
0