Quelqu'un aurait-il une "formule magique" pour automatiser la
v=E9rification d'une suite de chiffre (cotation : champ num=E9rique non
auto) dans lequel il peut y avoir des doublons : mon probl=E8me =E9tant de
rep=E9rer les =E9ventuelles "cotes vacantes" (num=E9ros non attribu=E9s) ?
Par avance merci :o)
Gauso
J'ai parlé un peu trop vite ! .... ça marche parfaitement si le nombre d'occurrences ne dépasse par les 200, après ça rame tellement que je suis obligée d'interrompre le processus via le gestionnaire des tâches (!), Donc, je crois que je vais me passer de l'action 2),
(ce message : simplement pour information...), Bonne soirée, Gauso
Essaye avec cette requête :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
Bonsoir,
gauso a écrit :
J'ai parlé un peu trop vite !
.... ça marche parfaitement si le nombre d'occurrences ne dépasse par
les 200, après ça rame tellement que je suis obligée d'interrompre le
processus via le gestionnaire des tâches (!),
Donc, je crois que je vais me passer de l'action 2),
(ce message : simplement pour information...),
Bonne soirée,
Gauso
Essaye avec cette requête :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant
FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1
GROUP BY B.LeChamp;
J'ai parlé un peu trop vite ! .... ça marche parfaitement si le nombre d'occurrences ne dépasse par les 200, après ça rame tellement que je suis obligée d'interrompre le processus via le gestionnaire des tâches (!), Donc, je crois que je vais me passer de l'action 2),
(ce message : simplement pour information...), Bonne soirée, Gauso
Essaye avec cette requête :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
gauso
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o) Comme indiqué précédemment donc, je ne sais trop comment adapter cett e requête : A quoi correspondent B et A ? (ce n'est sans doute pas la seule question que je risque de me poser en passant par une requête, mais en voilà déjà une !) Cordialement, Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 A S MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o)
Comme indiqué précédemment donc, je ne sais trop comment adapter cett e
requête :
A quoi correspondent B et A ? (ce n'est sans doute pas la seule
question que je risque de me poser en passant par une requête, mais en
voilà déjà une !)
Cordialement,
Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 A S MaxManquant
FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1
GROUP BY B.LeChamp;
Donc me revoilà quelques messages en arrière ;o) Comme indiqué précédemment donc, je ne sais trop comment adapter cett e requête : A quoi correspondent B et A ? (ce n'est sans doute pas la seule question que je risque de me poser en passant par une requête, mais en voilà déjà une !) Cordialement, Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 A S MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
P3859
Le 20/11/2010 22:00, gauso a écrit :
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o) Comme indiqué précédemment donc, je ne sais trop comment adapter cette requête : A quoi correspondent B et A ? (ce n'est sans doute pas la seule question que je risque de me poser en passant par une requête, mais en voilà déjà une !) Cordialement, Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
Et avec ça :
Instruction SELECT Afficher toutMasquer toutDemande au moteur de base de données Microsoft Access de renvoyer des informations depuis la base de données sous la forme d'un jeu d'enregistrements.
L'instruction SELECT se compose des éléments suivants :
Composant Description prédicat Un des prédicats suivants : ALL, DISTINCT, DISTINCTROW ou TOP. Les prédicats permettent de limiter le nombre d'enregistrements renvoyés. Si aucun n’est précisé, ALL est choisi par défaut. * Indique que tous les champs de la ou des tables spécifiées sont sélectionnés. table Nom de la table contenant les champs dans lesquels les enregistrements sont sélectionnés. champ1, champ2 Noms des champs contenant les données à extraire. Si vous incluez plusieurs champs, les données seront extraites dans l'ordre indiqué. alias1, alias2 Noms à utiliser comme en-têtes de colonne à la place des noms de colonnes originaux dans table. expressiontable Nom de la ou des tables contenant les données à extraire. basededonnéesexterne Nom de la base de données contenant les tables de expressiontable si elles ne se trouvent pas dans la base de données en cours.
Bonne soirée
Le 20/11/2010 22:00, gauso a écrit :
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o)
Comme indiqué précédemment donc, je ne sais trop comment adapter cette
requête :
A quoi correspondent B et A ? (ce n'est sans doute pas la seule
question que je risque de me poser en passant par une requête, mais en
voilà déjà une !)
Cordialement,
Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant
FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1
GROUP BY B.LeChamp;
Et avec ça :
Instruction SELECT
Afficher toutMasquer toutDemande au moteur de base de données Microsoft Access de renvoyer des informations depuis la base de
données sous la forme d'un jeu d'enregistrements.
L'instruction SELECT se compose des éléments suivants :
Composant Description
prédicat Un des prédicats suivants : ALL, DISTINCT, DISTINCTROW ou TOP. Les prédicats permettent de limiter le nombre
d'enregistrements renvoyés. Si aucun n’est précisé, ALL est choisi par défaut.
* Indique que tous les champs de la ou des tables spécifiées sont sélectionnés.
table Nom de la table contenant les champs dans lesquels les enregistrements sont sélectionnés.
champ1, champ2 Noms des champs contenant les données à extraire. Si vous incluez plusieurs champs, les données seront extraites dans
l'ordre indiqué.
alias1, alias2 Noms à utiliser comme en-têtes de colonne à la place des noms de colonnes originaux dans table.
expressiontable Nom de la ou des tables contenant les données à extraire.
basededonnéesexterne Nom de la base de données contenant les tables de expressiontable si elles ne se trouvent pas dans la base de
données en cours.
Donc me revoilà quelques messages en arrière ;o) Comme indiqué précédemment donc, je ne sais trop comment adapter cette requête : A quoi correspondent B et A ? (ce n'est sans doute pas la seule question que je risque de me poser en passant par une requête, mais en voilà déjà une !) Cordialement, Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
Et avec ça :
Instruction SELECT Afficher toutMasquer toutDemande au moteur de base de données Microsoft Access de renvoyer des informations depuis la base de données sous la forme d'un jeu d'enregistrements.
L'instruction SELECT se compose des éléments suivants :
Composant Description prédicat Un des prédicats suivants : ALL, DISTINCT, DISTINCTROW ou TOP. Les prédicats permettent de limiter le nombre d'enregistrements renvoyés. Si aucun n’est précisé, ALL est choisi par défaut. * Indique que tous les champs de la ou des tables spécifiées sont sélectionnés. table Nom de la table contenant les champs dans lesquels les enregistrements sont sélectionnés. champ1, champ2 Noms des champs contenant les données à extraire. Si vous incluez plusieurs champs, les données seront extraites dans l'ordre indiqué. alias1, alias2 Noms à utiliser comme en-têtes de colonne à la place des noms de colonnes originaux dans table. expressiontable Nom de la ou des tables contenant les données à extraire. basededonnéesexterne Nom de la base de données contenant les tables de expressiontable si elles ne se trouvent pas dans la base de données en cours.
Bonne soirée
Michel__D
Re,
B et A sont des alias des noms de table utilisées.
Ici B et A remplace LaTable
Tu as juste besoin de remplacer :
LeChamp => par le nom du champ qui va bien et LaTable => par le nom de la table/requête qui va bien
Soit si j'ai tout suivi :
SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant FROM ReqcotDossFds AS A INNER JOIN ReqcotDossFds AS B ON A.cote-B.cote>1 WHERE A.cote<>8888 And A.cote<>9999 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote;
gauso a écrit :
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o) Comme indiqué précédemment donc, je ne sais trop comment adapter cette requête : A quoi correspondent B et A ? (ce n'est sans doute pas la seule question que je risque de me poser en passant par une requête, mais en voilà déjà une !) Cordialement, Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
Re,
B et A sont des alias des noms de table utilisées.
Ici B et A remplace LaTable
Tu as juste besoin de remplacer :
LeChamp => par le nom du champ qui va bien
et
LaTable => par le nom de la table/requête qui va bien
Soit si j'ai tout suivi :
SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant
FROM ReqcotDossFds AS A INNER JOIN ReqcotDossFds AS B ON A.cote-B.cote>1
WHERE A.cote<>8888 And A.cote<>9999 And B.cote<>8888 And B.cote<>9999
GROUP BY B.cote;
gauso a écrit :
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o)
Comme indiqué précédemment donc, je ne sais trop comment adapter cette
requête :
A quoi correspondent B et A ? (ce n'est sans doute pas la seule
question que je risque de me poser en passant par une requête, mais en
voilà déjà une !)
Cordialement,
Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant
FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1
GROUP BY B.LeChamp;
B et A sont des alias des noms de table utilisées.
Ici B et A remplace LaTable
Tu as juste besoin de remplacer :
LeChamp => par le nom du champ qui va bien et LaTable => par le nom de la table/requête qui va bien
Soit si j'ai tout suivi :
SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant FROM ReqcotDossFds AS A INNER JOIN ReqcotDossFds AS B ON A.cote-B.cote>1 WHERE A.cote<>8888 And A.cote<>9999 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote;
gauso a écrit :
Bonsoir Michel,
Donc me revoilà quelques messages en arrière ;o) Comme indiqué précédemment donc, je ne sais trop comment adapter cette requête : A quoi correspondent B et A ? (ce n'est sans doute pas la seule question que je risque de me poser en passant par une requête, mais en voilà déjà une !) Cordialement, Gauso
Essaye avec cette requ te :
SELECT B.LeChamp+1 AS MinManquant, B.LeChamp+Min(A.LeChamp-B.LeChamp)-1 AS MaxManquant FROM LaTable AS A INNER JOIN LaTable AS B ON A.LeChamp-B.LeChamp>1 GROUP BY B.LeChamp;
gauso
Merci Michel,
Hélas cela ne fonctionne pas : j'ai donc écris dans ma requête en SQL : SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote;
=> j'ai mis la table source à la place la requête et ajouté d'autre s "code" à éliminer de l'analyse, mais la requête ne veut même pas s'afficher en mode création ! Message d'erreur : impossible de représenter l'expression de la jointure A.cote-B.cote... !
J'ai également essayé de reprendre la formulation indiquée par P3859 sur l'autre forum en créant une requête source ZReqGranet (à la place de la table) afin de ne sélectionner qu'un seul fonds et supprimer en amont tous les "codes" à ne pas comprendre dans l'analyse (8888, 9999...), ce qui donne :
SELECT cote FROM ZReqGranet a WHERE (a.cote - 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> 0) OR (a.cote + 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> (SELECT Max(cote) FROM ZReqGranet)) ORDER BY cote
=> là, le code SQL est accepté et je parviens à l'afficher en mode création, mais à l'exécution cela ne fonctionne pas non plus : rame pendant des heures... (obligé d'interrompre !),
Je crois décidément que je vais laisser tomber : merci quand même à tous :o) Gauso
Merci Michel,
Hélas cela ne fonctionne pas : j'ai donc écris dans ma requête en
SQL :
SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS
MaxManquant FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON
A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777
And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555
And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888
And B.cote<>9999 GROUP BY B.cote;
=> j'ai mis la table source à la place la requête et ajouté d'autre s
"code" à éliminer de l'analyse, mais la requête ne veut même pas
s'afficher en mode création !
Message d'erreur : impossible de représenter l'expression de la
jointure A.cote-B.cote... !
J'ai également essayé de reprendre la formulation indiquée par P3859
sur l'autre forum en créant une requête source ZReqGranet (à la place
de la table) afin de ne sélectionner qu'un seul fonds et supprimer en
amont tous les "codes" à ne pas comprendre dans l'analyse (8888,
9999...), ce qui donne :
SELECT cote FROM ZReqGranet a WHERE (a.cote - 1 NOT IN (SELECT cote
FROM ZReqGranet) AND a.cote <> 0) OR (a.cote + 1 NOT IN (SELECT cote
FROM ZReqGranet) AND a.cote <> (SELECT Max(cote) FROM ZReqGranet))
ORDER BY cote
=> là, le code SQL est accepté et je parviens à l'afficher en mode
création, mais à l'exécution cela ne fonctionne pas non plus : rame
pendant des heures... (obligé d'interrompre !),
Je crois décidément que je vais laisser tomber : merci quand même à
tous :o)
Gauso
Hélas cela ne fonctionne pas : j'ai donc écris dans ma requête en SQL : SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote;
=> j'ai mis la table source à la place la requête et ajouté d'autre s "code" à éliminer de l'analyse, mais la requête ne veut même pas s'afficher en mode création ! Message d'erreur : impossible de représenter l'expression de la jointure A.cote-B.cote... !
J'ai également essayé de reprendre la formulation indiquée par P3859 sur l'autre forum en créant une requête source ZReqGranet (à la place de la table) afin de ne sélectionner qu'un seul fonds et supprimer en amont tous les "codes" à ne pas comprendre dans l'analyse (8888, 9999...), ce qui donne :
SELECT cote FROM ZReqGranet a WHERE (a.cote - 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> 0) OR (a.cote + 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> (SELECT Max(cote) FROM ZReqGranet)) ORDER BY cote
=> là, le code SQL est accepté et je parviens à l'afficher en mode création, mais à l'exécution cela ne fonctionne pas non plus : rame pendant des heures... (obligé d'interrompre !),
Je crois décidément que je vais laisser tomber : merci quand même à tous :o) Gauso
Michel__D
Bonjour,
gauso a écrit :
Merci Michel,
Hélas cela ne fonctionne pas : j'ai donc écris dans ma requête en SQL : SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote;
=> j'ai mis la table source à la place la requête et ajouté d'autres "code" à éliminer de l'analyse, mais la requête ne veut même pas s'afficher en mode création ! Message d'erreur : impossible de représenter l'expression de la jointure A.cote-B.cote... !
J'ai également essayé de reprendre la formulation indiquée par P3859 sur l'autre forum en créant une requête source ZReqGranet (à la place de la table) afin de ne sélectionner qu'un seul fonds et supprimer en amont tous les "codes" à ne pas comprendre dans l'analyse (8888, 9999...), ce qui donne :
SELECT cote FROM ZReqGranet a WHERE (a.cote - 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> 0) OR (a.cote + 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> (SELECT Max(cote) FROM ZReqGranet)) ORDER BY cote
=> là, le code SQL est accepté et je parviens à l'afficher en mode création, mais à l'exécution cela ne fonctionne pas non plus : rame pendant des heures... (obligé d'interrompre !),
Je crois décidément que je vais laisser tomber : merci quand même à tous :o) Gauso
Essaye plutôt avec cette requête (la 1ère requête était incorrecte) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant FROM (SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote) AS R LEFT JOIN InvDossiers AS T ON R.MinManquant=T.cote WHERE T.cote Is Null;
PS: Par contre une chose que je ne comprends pas c'est pourquoi tu écarte certaines valeurs qui existent et ne peuvent donc pas être utilisées. Car la requête ci-dessus considére ces valeurs comme manquante. Maintenant si la valeur de ton champ [cote] ne dépasse pas 5555 on pourrait simplifier la requête.
Bonjour,
gauso a écrit :
Merci Michel,
Hélas cela ne fonctionne pas : j'ai donc écris dans ma requête en
SQL :
SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS
MaxManquant FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON
A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777
And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555
And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888
And B.cote<>9999 GROUP BY B.cote;
=> j'ai mis la table source à la place la requête et ajouté d'autres
"code" à éliminer de l'analyse, mais la requête ne veut même pas
s'afficher en mode création !
Message d'erreur : impossible de représenter l'expression de la
jointure A.cote-B.cote... !
J'ai également essayé de reprendre la formulation indiquée par P3859
sur l'autre forum en créant une requête source ZReqGranet (à la place
de la table) afin de ne sélectionner qu'un seul fonds et supprimer en
amont tous les "codes" à ne pas comprendre dans l'analyse (8888,
9999...), ce qui donne :
SELECT cote FROM ZReqGranet a WHERE (a.cote - 1 NOT IN (SELECT cote
FROM ZReqGranet) AND a.cote <> 0) OR (a.cote + 1 NOT IN (SELECT cote
FROM ZReqGranet) AND a.cote <> (SELECT Max(cote) FROM ZReqGranet))
ORDER BY cote
=> là, le code SQL est accepté et je parviens à l'afficher en mode
création, mais à l'exécution cela ne fonctionne pas non plus : rame
pendant des heures... (obligé d'interrompre !),
Je crois décidément que je vais laisser tomber : merci quand même à
tous :o)
Gauso
Essaye plutôt avec cette requête (la 1ère requête était incorrecte) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant
FROM (SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue
FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1
WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755
And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666
And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999
GROUP BY B.cote) AS R LEFT JOIN InvDossiers AS T ON R.MinManquant=T.cote
WHERE T.cote Is Null;
PS: Par contre une chose que je ne comprends pas c'est pourquoi tu écarte
certaines valeurs qui existent et ne peuvent donc pas être utilisées.
Car la requête ci-dessus considére ces valeurs comme manquante.
Maintenant si la valeur de ton champ [cote] ne dépasse pas 5555 on pourrait
simplifier la requête.
Hélas cela ne fonctionne pas : j'ai donc écris dans ma requête en SQL : SELECT B.cote+1 AS MinManquant, B.cote+Min(A.cote-B.cote)-1 AS MaxManquant FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote;
=> j'ai mis la table source à la place la requête et ajouté d'autres "code" à éliminer de l'analyse, mais la requête ne veut même pas s'afficher en mode création ! Message d'erreur : impossible de représenter l'expression de la jointure A.cote-B.cote... !
J'ai également essayé de reprendre la formulation indiquée par P3859 sur l'autre forum en créant une requête source ZReqGranet (à la place de la table) afin de ne sélectionner qu'un seul fonds et supprimer en amont tous les "codes" à ne pas comprendre dans l'analyse (8888, 9999...), ce qui donne :
SELECT cote FROM ZReqGranet a WHERE (a.cote - 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> 0) OR (a.cote + 1 NOT IN (SELECT cote FROM ZReqGranet) AND a.cote <> (SELECT Max(cote) FROM ZReqGranet)) ORDER BY cote
=> là, le code SQL est accepté et je parviens à l'afficher en mode création, mais à l'exécution cela ne fonctionne pas non plus : rame pendant des heures... (obligé d'interrompre !),
Je crois décidément que je vais laisser tomber : merci quand même à tous :o) Gauso
Essaye plutôt avec cette requête (la 1ère requête était incorrecte) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant FROM (SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue FROM InvDossiers AS A INNER JOIN InvDossiers AS B ON A.cote-B.cote>1 WHERE A.cote<>5555 And A.cote<>6666 And A.cote<>7777 And A.cote<>7755 And A.cote<>8888 And A.cote<>9999 And B.cote<>5555 And B.cote<>6666 And B.cote<>7777 And B.cote<>7755 And B.cote<>8888 And B.cote<>9999 GROUP BY B.cote) AS R LEFT JOIN InvDossiers AS T ON R.MinManquant=T.cote WHERE T.cote Is Null;
PS: Par contre une chose que je ne comprends pas c'est pourquoi tu écarte certaines valeurs qui existent et ne peuvent donc pas être utilisées. Car la requête ci-dessus considére ces valeurs comme manquante. Maintenant si la valeur de ton champ [cote] ne dépasse pas 5555 on pourrait simplifier la requête.
gauso
Ouf, ça marche enfin ! Merci Michel :o)))
Voici ce que j'ai finalement écris en suivant ton conseil de simplification (les cotes sont toujours inférieures à 5555 en effet : enfin jusqu'à présent... à surveiller) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant FROM [SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue FROM ReqInvVERIFDossCotFdsTous AS A INNER JOIN ReqInvVERIFDossCotFdsTous AS B ON A.cote-B.cote>1 WHERE A.cote<5555 And B.cote<5555 GROUP BY B.cote]. AS R LEFT JOIN ReqInvVERIFDossCotFdsTous AS T ON R.MinManquant = T.Cote WHERE (((T.Cote) Is Null));
(j'utilise en lieu et place de la table, une requête qui est la source de mon formulaire d'affichage et contrôle des cotes : je lance la requête depuis ce formulaire après avoir sélectionné un "fonds"...)
Et c'est effectivement beaucoup plus rapide avec ce système !
Merci infiniment à tous pour votre intérêt et votre soutien précieu x, Bon dimanche, Gauso
Ouf, ça marche enfin ! Merci Michel :o)))
Voici ce que j'ai finalement écris en suivant ton conseil de
simplification (les cotes sont toujours inférieures à 5555 en effet :
enfin jusqu'à présent... à surveiller) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant
FROM [SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue
FROM ReqInvVERIFDossCotFdsTous AS A INNER JOIN
ReqInvVERIFDossCotFdsTous AS B ON A.cote-B.cote>1 WHERE A.cote<5555
And B.cote<5555 GROUP BY B.cote]. AS R LEFT JOIN
ReqInvVERIFDossCotFdsTous AS T ON R.MinManquant = T.Cote
WHERE (((T.Cote) Is Null));
(j'utilise en lieu et place de la table, une requête qui est la source
de mon formulaire d'affichage et contrôle des cotes : je lance la
requête depuis ce formulaire après avoir sélectionné un "fonds"...)
Et c'est effectivement beaucoup plus rapide avec ce système !
Merci infiniment à tous pour votre intérêt et votre soutien précieu x,
Bon dimanche,
Gauso
Voici ce que j'ai finalement écris en suivant ton conseil de simplification (les cotes sont toujours inférieures à 5555 en effet : enfin jusqu'à présent... à surveiller) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant FROM [SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue FROM ReqInvVERIFDossCotFdsTous AS A INNER JOIN ReqInvVERIFDossCotFdsTous AS B ON A.cote-B.cote>1 WHERE A.cote<5555 And B.cote<5555 GROUP BY B.cote]. AS R LEFT JOIN ReqInvVERIFDossCotFdsTous AS T ON R.MinManquant = T.Cote WHERE (((T.Cote) Is Null));
(j'utilise en lieu et place de la table, une requête qui est la source de mon formulaire d'affichage et contrôle des cotes : je lance la requête depuis ce formulaire après avoir sélectionné un "fonds"...)
Et c'est effectivement beaucoup plus rapide avec ce système !
Merci infiniment à tous pour votre intérêt et votre soutien précieu x, Bon dimanche, Gauso
Michel__D
Re,
gauso a écrit :
Ouf, ça marche enfin ! Merci Michel :o)))
Ok (j'avais testé de mon coté, donc pas trop de surprise).
Voici ce que j'ai finalement écris en suivant ton conseil de simplification (les cotes sont toujours inférieures à 5555 en effet : enfin jusqu'à présent... à surveiller) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant FROM [SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue FROM ReqInvVERIFDossCotFdsTous AS A INNER JOIN ReqInvVERIFDossCotFdsTous AS B ON A.cote-B.cote>1 WHERE A.cote<5555 And B.cote<5555 GROUP BY B.cote]. AS R LEFT JOIN ReqInvVERIFDossCotFdsTous AS T ON R.MinManquant = T.Cote WHERE (((T.Cote) Is Null));
(j'utilise en lieu et place de la table, une requête qui est la source de mon formulaire d'affichage et contrôle des cotes : je lance la requête depuis ce formulaire après avoir sélectionné un "fonds"...)
Et c'est effectivement beaucoup plus rapide avec ce système !
Avec certain type de requête, c'est effectivement trés rapide.
Merci infiniment à tous pour votre intérêt et votre soutien précieux, Bon dimanche, Gauso
Bon dimanche à toi aussi.
Re,
gauso a écrit :
Ouf, ça marche enfin ! Merci Michel :o)))
Ok (j'avais testé de mon coté, donc pas trop de surprise).
Voici ce que j'ai finalement écris en suivant ton conseil de
simplification (les cotes sont toujours inférieures à 5555 en effet :
enfin jusqu'à présent... à surveiller) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant
FROM [SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue
FROM ReqInvVERIFDossCotFdsTous AS A INNER JOIN
ReqInvVERIFDossCotFdsTous AS B ON A.cote-B.cote>1 WHERE A.cote<5555
And B.cote<5555 GROUP BY B.cote]. AS R LEFT JOIN
ReqInvVERIFDossCotFdsTous AS T ON R.MinManquant = T.Cote
WHERE (((T.Cote) Is Null));
(j'utilise en lieu et place de la table, une requête qui est la source
de mon formulaire d'affichage et contrôle des cotes : je lance la
requête depuis ce formulaire après avoir sélectionné un "fonds"...)
Et c'est effectivement beaucoup plus rapide avec ce système !
Avec certain type de requête, c'est effectivement trés rapide.
Merci infiniment à tous pour votre intérêt et votre soutien précieux,
Bon dimanche,
Gauso
Ok (j'avais testé de mon coté, donc pas trop de surprise).
Voici ce que j'ai finalement écris en suivant ton conseil de simplification (les cotes sont toujours inférieures à 5555 en effet : enfin jusqu'à présent... à surveiller) :
SELECT R.MinManquant, R.MinManquant+R.Etendue AS MaxManquant FROM [SELECT B.cote+1 AS MinManquant, Min(A.cote-B.cote)-2 AS Etendue FROM ReqInvVERIFDossCotFdsTous AS A INNER JOIN ReqInvVERIFDossCotFdsTous AS B ON A.cote-B.cote>1 WHERE A.cote<5555 And B.cote<5555 GROUP BY B.cote]. AS R LEFT JOIN ReqInvVERIFDossCotFdsTous AS T ON R.MinManquant = T.Cote WHERE (((T.Cote) Is Null));
(j'utilise en lieu et place de la table, une requête qui est la source de mon formulaire d'affichage et contrôle des cotes : je lance la requête depuis ce formulaire après avoir sélectionné un "fonds"...)
Et c'est effectivement beaucoup plus rapide avec ce système !
Avec certain type de requête, c'est effectivement trés rapide.
Merci infiniment à tous pour votre intérêt et votre soutien précieux, Bon dimanche, Gauso