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

améliorer ma requete sql

16 réponses
Avatar
Papilou
Bonjour à tous, et merci de votre aide
voila mon problème
La requête suivante :
SELECT Ligne, Min(PK_deb) AS MinDePK_deb, Max(PK_fin) AS MaxDePK_fin, ELECT
FROM Dec_ligne
GROUP BY Ligne, ELECT
HAVING Ligne="930000";

Me donne ce résultat
Ligne MinDePK_deb MaxDePK_fin ELECT
930000 0 259,155 1500V
930000 5,448 257,475 25000V

La table d'origine est celle-ci :
Ligne PK_deb PK_fin ELECT
930000 0 0,114 1500V
930000 0,114 2,3 1500V
930000 2,3 3,258 1500V
930000 5,443 5,448 1500V
930000 5,448 12,12 25000V
930000 12,12 12,82 25000V
930000 12,82 13,3 25000V
930000 251,934 252,4 25000V
930000 252,4 257,475 25000V
930000 257,475 259,155 1500V

Moi je cherche à obtenir ceci
Ligne MinDePK_deb MaxDePK_fin ELECT
930000 0 5,448 1500V
930000 5,448 257,475 25000V
930000 257,475 259,155 1500V

Je pense qu'il est necessaire de programmer un peu... non?
Je ne pense pas réaliser cela en une seule requête .... si?
Alors comment faire? puis-je avoir de l'aide?
merci

10 réponses

1 2
Avatar
Richard_35
Bonjour,

Il est normal que cette requête te retourne ce résultat : la notion
GROUP BY te dit "1 ligne par élément du GROUP BY", donc une ligne par Ligne,
ELECT.
Il faudrait définir une clé de regroupement différente pour les 1er
couples Ligne, ELECT et les 2ème couples Ligne, ELECT.
Par exemple, s'il s'agit d'un groupe de mesure :
La table d'origine devrait être celle-ci :
Ligne PK_deb PK_fin ELECT
930000 1 0 0,114 1500V
930000 1 0,114 2,3 1500V
930000 1 2,3 3,258 1500V
930000 1 5,443 5,448 1500V
930000 1 5,448 12,12 25000V
930000 1 12,12 12,82 25000V
930000 1 12,82 13,3 25000V
930000 1 251,934 252,4 25000V
930000 1 252,4 257,475 25000V
930000 2 257,475 259,155 1500V


Donc, les groupes seraient :
930000 1 1500V
930000 1 25000V
930000 2 1500V

Car, à priori, le système n'a aucune raison de considérer le 2ème 930000
1500V différent du 1er.
Ensuite : GROUP BY Ligne, Seq, ELECT

J'espère avoir été clair.
Bon courage,
Richard.

"Papilou" a écrit dans le message de news:
446f07eb$0$12786$
Bonjour à tous, et merci de votre aide
voila mon problème
La requête suivante :
SELECT Ligne, Min(PK_deb) AS MinDePK_deb, Max(PK_fin) AS MaxDePK_fin,
ELECT
FROM Dec_ligne
GROUP BY Ligne, ELECT
HAVING Ligne="930000";

Me donne ce résultat
Ligne MinDePK_deb MaxDePK_fin ELECT
930000 0 259,155 1500V
930000 5,448 257,475 25000V

La table d'origine est celle-ci :
Ligne PK_deb PK_fin ELECT
930000 0 0,114 1500V
930000 0,114 2,3 1500V
930000 2,3 3,258 1500V
930000 5,443 5,448 1500V
930000 5,448 12,12 25000V
930000 12,12 12,82 25000V
930000 12,82 13,3 25000V
930000 251,934 252,4 25000V
930000 252,4 257,475 25000V
930000 257,475 259,155 1500V

Moi je cherche à obtenir ceci
Ligne MinDePK_deb MaxDePK_fin ELECT
930000 0 5,448 1500V
930000 5,448 257,475 25000V
930000 257,475 259,155 1500V

Je pense qu'il est necessaire de programmer un peu... non?
Je ne pense pas réaliser cela en une seule requête .... si?
Alors comment faire? puis-je avoir de l'aide?
merci







Avatar
Papilou
Merci de ta réponse.
J'ai parfaitement compris ta solution.
Sauf que je ne peux pas changer la table d'origine, il faut donc pouvoir
aller mettre les 1, et 2 de ta colonne supplémentaire, oui, mais comment
faire? c'est ca la question.
Avatar
J-Pierre
Bonjour,

En fait, tu n'as pas dit ce que tu voulais, tu donnes un exemple et nous devons en déduire que..... Je pense avoir aussi
compris, mais je préfèrerais que tu le dises toi-même :-)
Oublie la programmation, et essaie de dire en français ce que tu veux. Après, il sera facile de traduire en VBA

A+
J-Pierre

"Papilou" a écrit dans le message de news: 446f13b0$0$12814$
Merci de ta réponse.
J'ai parfaitement compris ta solution.
Sauf que je ne peux pas changer la table d'origine, il faut donc pouvoir aller mettre les 1, et 2 de ta colonne
supplémentaire, oui, mais comment faire? c'est ca la question.



Avatar
Richard_35
Alors, qu'est-ce qui fait la différence entre les groupes ?
La position dans le fichier ?


"Papilou" a écrit dans le message de news:
446f13b0$0$12814$
Merci de ta réponse.
J'ai parfaitement compris ta solution.
Sauf que je ne peux pas changer la table d'origine, il faut donc pouvoir
aller mettre les 1, et 2 de ta colonne supplémentaire, oui, mais comment
faire? c'est ca la question.



Avatar
Papilou
Avec mes excuses, mais je pensais avoir été clair.
Je n'ai pas la solution.
première question est-ce possible en SQL. (personnellement je ne pense pas
il n'y a pas de moyen de changer la table de départ. Donc pas de colonne
supplémentaire.

Seconde question est-ce possible en VBA ? oui je pense, mais je ne sais pas
faire.
Je ne sais pas ou mettre le programme, comment le lancer, etc etc ....

Voila ce que je pense qu'il faudrait faire :
En pseudo VBA et francais :

Dim db As Database
Dim reponse As Recordset
Dim sql As String
Set db = CurrentDb()

sql = "SELECT Ligne, PK_deb, PK_fin, ELECT FROM Dec_ligne WHERE Ligne LIKE
'930000';"
Set reponse = db.OpenRecordset(strRst, dbOpenDynaset)

Eregistrement = 1
L=ligne de enregistrement1
PD=PK_deb de enregidtrement 1
PF=PK_fin de l'enregistrement 1
E=ELECT de l'enregistrement 1

While Not reponse.EOF
je prends l'enregistrement suivant
Si PK_deb<PD je met PK_deb dans PD
Si PK_fin >PF je met PK_fin dans PF
Si ELECT =E
je conserve les champs ligne, ELECT dans des variables L,E
Sinon
j'affiche la ligne L,PD,PF,E
fin de Si
Wend

reponse.Close: Set reponse = Nothing
db.Close: Set db = Nothing
Avatar
Papilou
Ben il n'y en a pas, c'est le problème que j'ai à résoudre.
Merci de tes efforts, pour me comprendre.
Avatar
J-Pierre
Papilou,

Tu recommences à aligner du code VBA..... Si tu n'es pas capable d'exprimer clairement en français ce que tu veux faire, il me
parait difficile de te proposer une solution :-) Je ne te demande pas du VBA en franglais, mais une phrase....sans VBA du tout

J-Pierre
Avatar
Richard_35
Excuses-moi, mais là, tu te retrouveras avec le résultat de la requête SQL
dont tu parlais au début et qui ne te convient pas !


"Papilou" a écrit dans le message de news:
446f2e73$0$9008$
Avec mes excuses, mais je pensais avoir été clair.
Je n'ai pas la solution.
première question est-ce possible en SQL. (personnellement je ne pense pas
il n'y a pas de moyen de changer la table de départ. Donc pas de colonne
supplémentaire.

Seconde question est-ce possible en VBA ? oui je pense, mais je ne sais
pas faire.
Je ne sais pas ou mettre le programme, comment le lancer, etc etc ....

Voila ce que je pense qu'il faudrait faire :
En pseudo VBA et francais :

Dim db As Database
Dim reponse As Recordset
Dim sql As String
Set db = CurrentDb()

sql = "SELECT Ligne, PK_deb, PK_fin, ELECT FROM Dec_ligne WHERE Ligne LIKE
'930000';"
Set reponse = db.OpenRecordset(strRst, dbOpenDynaset)

Eregistrement = 1
L=ligne de enregistrement1
PD=PK_deb de enregidtrement 1
PF=PK_fin de l'enregistrement 1
E=ELECT de l'enregistrement 1

While Not reponse.EOF
je prends l'enregistrement suivant
Si PK_deb<PD je met PK_deb dans PD
Si PK_fin >PF je met PK_fin dans PF
Si ELECT =E
je conserve les champs ligne, ELECT dans des variables L,E
Sinon
j'affiche la ligne L,PD,PF,E
fin de Si
Wend

reponse.Close: Set reponse = Nothing
db.Close: Set db = Nothing




Avatar
Richard_35
Il n'y en a pas, dans le fichier, mais qu'est-ce qui te fait dire, à toi (et
en français) que le groupe change ?


"Papilou" a écrit dans le message de news:
446f2ed2$0$12806$
Ben il n'y en a pas, c'est le problème que j'ai à résoudre.
Merci de tes efforts, pour me comprendre.



Avatar
Papilou
sur la premiere ligne je trouve 1500V
tant que je ne change pas je suis sur le premier groupe
puis je trouve 25000V je suis sur le second groupe
puis je retrouve 1500V je suis sur le troisieme groupe

Une requete ne suffit pas, j'en suis convaincu, mais je n'ai pas la
solution.
1 2