PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → probleme de requete
probleme de requete
Débuté par Malklan, 29 juil. 2017 20:11 - 6 réponses
Membre enregistré
8 messages
Posté le 29 juillet 2017 - 20:11
Bonjour j'ai un souci j'aimerais créés une requête qui compare deux colonne et leur attribue des points
donc j'ai une table qui contient les noms une autre table qui contient 7 colonne et une autre table qui contient 7 colonne aussi le but est comparer la table 2 colonne 1 a la table 3 colonne 1 est si c'est identique ont lui attribut une valeur sinon lui attribut une autre valeur .

Par contre je ne sais comment je doit faire si vais une autre table qui enregistre les valeur ou si je recalcule a chaque fois que j’exécute la requete . les table sont relier entre elle par une clé unique. c'est une table qui aura beaucoup d'enregistrement. J'ai essayer avec la méthode case mais sa fonctionne pas.

merci d'avance pour l'aide que vous m'apporterais
Posté le 30 juillet 2017 - 13:28
Select t1.id,
case when t3.c1=t2.c1 then 1 else 0 end
+ case when t3.c2=t2.c2 then 1 else 0 end
+ case when t3.c3=t2.c3 then 1 else 0 end
+ case when t3.c4=t2.c4 then 1 else 0 end
+ case when t3.c5=t2.c5 then 1 else 0 end as note
from table1 t1 , table2 t2 , table3 t3
where t2.id = t1.id ans t3.id = t1.id


Cette requete renvoie le résultat voulu.
Après, on en fait quoi,on insère ça dans un nouvelle table.. Si on doit modifier une table existant, lapartie calcul sera la même, mais il faudra modifier la structure.
Membre enregistré
3 881 messages
Popularité : +227 (347 votes)
Posté le 31 juillet 2017 - 09:16
Si j'ai bien tout compris, voici une orientation.

Conventions :



1 : Tableau de résultats. Nom : TABLE_Résultats avec une colonne COL_Résultats
2 et 3 : Tableaux à comparer. Nom : TABLE_Valeur1 et Table_Valeur2 avec comme colonnes de test COL_Val1 pour le 1°, COL_Val2 pour le 2°
4 : Bouton Comparer. Nom : BTN_Comparer. C'est grâce à lui que l'on va appeler la fonction de comparaison
5 : Champ jauge qui servira à faire patienter l'utilisateur. Nom : JAUGE_Progression

Sans plus de renseignements, j'ai considéré que les tableaux pouvaient être de taille différente. Qui peut le plus peut le moins

État initial :




État après comparaison :




Voici la fonction qui a permis ce résultat :
// Résumé : Cette fonction compare la valeur de 2 colonnes appartenant chacune à un tableau et remplit un 3° tableau avec le résultat de la comparaison
// Syntaxe :
//[ <Résultat> = ] fCompareTableau ()
//
// Paramètres :
// Aucun
// Valeur de retour :
// entier : // 0 : Une erreur non prévue est survenue
// 1 : La fonction s'est bien exécutée
// 2 : La fonction s'est bien exécutée avec de tableau de tailles différentes
// 3 : La fonction n'a pas pu s’exécuter car au moins un tableau était vide
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//// Traitement automatique des exceptions : exécuter le bloc de code CAS EXCEPTION:
//

FONCTION fCompareTableau() : entier

//J'ai supposé que les tableaux n'avaient pas le même nombre de lignes
//Dans le cas contraire, il y aura des test en moins

nOcc1 est entier //Nombre de lignes du premier tableau
nOcc2 est entier //Nombre de lignes du 2° tableau
nValParcours est entier //Variable pour le parcours des tableaux

nOccMin est entier //Plus petit nombre de ligne du tableau
nOccMax est entier //Plus grand nombre de ligne du tableau

nOcc1=TABLE_Valeur1..Occurrence
nOcc2=TABLE_Valeur2..Occurrence

//On vérifie que les 2 tableaux à comparer sont remplis
SI nOcc1=0 OU nOcc2=0 ALORS
RENVOYER 3
FIN
//Ce test est inutile si on est sur que les tableaux ont le même nombre de lignes
SI nOcc1<=nOcc2 ALORS //Le tableau 1 a moins de valeurs que la tableau 2
nOccMin=nOcc1
nOccMax=nOcc2
SINON
nOccMin=nOcc2
nOccMax=nOcc1
FIN

//Le traitement peut être long donc on a mis en place une jauge
JAUGE_Traitement..Visible=Vrai
JAUGE_Traitement..BorneMax=nOccMin

//On réinitialise notre tableau de résultats
TableSupprime(TABLE_Résultat)

//On va comparer les lignes une par une
POUR nValParcours=1 A nOccMin
JAUGE_Traitement++
SI TABLE_Valeur1.COL_Val1[nValParcours]=TABLE_Valeur2.COL_Val2[nValParcours] ALORS //Les valeurs des deux tableaux sont identiques
TableAjoute(TABLE_Résultat,"Identiques")
SINON
TableAjoute(TABLE_Résultat,"Différents")
FIN
FIN

SI nOccMin=nOccMax ALORS
JAUGE_Traitement..Visible = Faux
RENVOYER 1
SINON
//On termine le traitement pour les valeurs qui ne sont pas remplies dans l'un des tableaux
JAUGE_Traitement..BorneMin=nOccMin+1
JAUGE_Traitement..BorneMax=nOccMax

POUR nValParcours = nOccMin+1 A nOccMax
JAUGE_Traitement++
TableAjoute(TABLE_Résultat,"Comparaison impossible")
FIN
JAUGE_Traitement..Visible=Faux
RENVOYER 2
FIN

CAS EXCEPTION:
RENVOYER 0


et bien entendu il ne faut pas oublier d'ajouter fCompare() dans le code de BTN_Comparer

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
8 messages
Posté le 31 juillet 2017 - 19:25
Je vous remercie Dandypunk et joel pour vos réponse je met dessus demain et vous tien informer. encore un grand merci vous me retirer une grosse épine du pied
Membre enregistré
8 messages
Posté le 04 août 2017 - 15:03
Dandypunk j'ai un petit souci avec ton code donc je vais mieux expliquer le problème espérant que tu pourras de nouveau m'aider

la table1 un contient les colonne suivante
nom, id_automatique, objective1, objective2, objective3, objective4, objective5,

la table 2 contient les colonne suivante
id_automatique (qui est le même que la table 1) resulta1, resulta2,resulta3,resulta4,resulta5

La table 3 doit contenir
le nom , analyse1, analyse2, analyse3, analyse4, analyse5,

Analyse1 : objective1=resulta1
Analyse1 : objective2=resulta2 et un si de suite

et ensuite je doit faire la moyenne pour chaque non en fonction de chaque analyse
Posté le 05 août 2017 - 14:08
95% de la réponse à ta question est dans mon 1er message.
Membre enregistré
8 messages
Posté le 06 août 2017 - 21:06
bon aprés quelque recherche j'ai trouver il me reste plus qu'a trouver pour la moyenne pour chaque analyse merci a vous deux.