|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
salut à tous,
je tourne en rond depuis quelque temps sur une requête. Voilà, j'ai une Table 'Localité' dont les champs sont: -Id_Client. -Localité. Chaque Localité peux avoir un ou plusieurs 'Id_Clients'. Des fois Ces 'id' peuvent se suivre ,mais des fois non. exemple: -Localité : Paris => Id_Client: de '1' jusqu'à '10' , '65' , de '100' jusqu'à '106'. -Localité : Lyon => Id_Client: 125, 201, 206, de '230' => '235'. voici un exemple en image. http://imageshack.us/photo/my-images/818/exempleux.jpg merci. A+ NABL74 |
|
|
01
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() |
Bonjour,Je crains que vous ne tourniez encore longtemps en rond...
![]() On ne sait pas ce quel but vous cherchez à atteindre, ce que vous avez pu écrire, en quoi cela ne marche pas...
__________________
Philippe. |
|
|
10
|
|
|
#3 | |||
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
Citation:
Eh oui Ph. B, je tourne en rond toujours cher ami ![]() Le but que je cherche à atteindre c'est de grouper les "Id_Client" s'il leurs "Id" se suivent. Par exemple : Dans la même localité, il y a les ID :de 1,2,3,4,5,6,....jusqu'à 200. Si dans un Etat (comme Report Builder ou autre), la colonne réservée pour les "Id" va prendre beaucoup d'espace non? Alors, je veux les regrouper comme ça: 1-200.c'est pour gagner de l'espace dans un Etat (Report Builder). J'ai essayé avec un Code :
-Localité : Paris => Id_Client: de '1' jusqu'à '200' , '65' ,90, de '300' jusqu'à '360'. je veux le faire comme ça:ID: 1-200 , 65 , 90 , 300-360. J'ignore si j'ai bien exposé mon problème ou non. Merci . @+ NABIL74 |
|||
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Jérémy Analyste programmeeur Delphi / C# Inscription : mars 2005 Messages : 738 ![]() |
A moins d'un script SQL, il n'est pas possible d'obtenir ce résultat surtout si les données sont dans la même tâble.
La requête suivante te permettra de lister les localité et les client rattachés (par ordre croissant) Code SQL :
SELECT Localité, Id_Client FROM Localité ORDER BY Localité, Id_Client Ensuite, avec une simple iétration du peux faire le traitement que tu veux. Exemple avant la boucle tu initialise une variable temporaire avec une chaine vide et une variable dans laquelle tu inscrit la localité. Puisque c'est trié par localité tu peut tester si ta valeur temporaire est différente de la localité courante et ainsi tu sais que tu as changé de localité. Pour chaque localité trouvé tu liste les id des clients et à la fin tu la formate comme tu veux. PS : Un conseil, ne nomme pas un champ avec le même nom que la table et surtout EVITE LES CARACTERES ACCENTUES. |
|
|
00
|
|
|
#5 | ||
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
Citation:
oui les données sont dans la même table c'est ça qui est ennuyeux! pour la requête que tu m'as filé, je l'ai testée il y a quelques jours mais hélas! Citation:
![]() je continue mes tests. @+ NABIL74 |
||
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() ![]() |
Citation:
Ce n'est pas faisable en l'état en une seule requête. Quel est le moteur de base de données ?
__________________
Philippe. |
|
|
|
00
|
|
|
#7 | |
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
Citation:
@ Ph. B SGBD :paradox (Eh oui !en réalité, c'est une vieille application que je veux améliorer). Tu m'as dis que ce n'est pas faisable en l'état en une seule requête,si c'est possible en plusieurs requêtes, c'est pas grave,l'essentiel c'est que j'obtiens mon objectif. Merci. A+ NABIL74 |
|
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() ![]() |
Citation:
Citation:
Mais il y a peut être une solution plus fine, à réfléchir...
__________________
Philippe. |
||
|
|
00
|
|
|
#9 |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 273 ![]() |
J'ai dans mes archives un programme (une fonction) qui listait les "trous" de facturations , en fait la fonction inverse de celle recherchée, mais je peux toujours la retrouver pour donner une idée .
je mettais les résultats dans un Memo tout bête ^^
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
|
|
00
|
|
|
#10 | |
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
Citation:
@ Ph. B.: Merci, oui, je suis sous Delphi 7 ent. Les données peuvent atteindre au maximum 100000 à 130000 enregistrements. Avec la méthode que tu m'as proposée, j'ignore si c'est faisable avec ce nombre d'enregistrement sans parler de la consommation de ressources. J'ai essayé avec Code :
Select Localite,Min(Id_client),Max(Id_client) from Localite where Localite=Localite @ Sergio:merci, Serge. essaye de trouver cette fonction quand tu auras le temps. En fait, si ce n'est pas possible de trouver une solution à ce problème, comment faire pour regrouper la série Des "Id_Clients" même en le faisant en plusieurs lignes: Exemple: - Localité : Paris : ID :=> 1,2,3,4,5...200. - Localité : Paris : ID :=> 300,301,302,304,305. - Localité : Paris : ID :=> 320,321...342. Je veux les regrouper comme ça: - Localité : Paris : ID :=> 1-200. (1 ère ligne) - Localité : Paris : ID :=> 300-305. (2e ligne ) - Localité : Paris : ID :=> 320-342. (3e ligne ) . . Merci les gars. @+ NABIL |
|
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Dev/For/Vte/Ass Inscription : août 2008 Messages : 1 499 ![]() |
Bonjour,
Je ne sais pas si paradox le gère mais il existe un moyen d'y arriver avec la clause UNION Code :
Bye |
||
|
|
00
|
|
|
#12 | ||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 273 ![]() |
Code :
dommage quand même que ce soit Paradox , cela aurait été l'exemple 'presque' parfait avec Firebird et une utilisation des Requêtes Recursives
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
||
|
|
10
|
|
|
#13 |
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
@ Serge; merci pour ce tuyau.
Comme j'ignore si 'Numeros' est une table ou une requête, j'ai fait un test en le supprimant et garder "FieldByName('Num_Objet').AsInteger", ça marche sur Paradox quand j' mais il y a un souci sur la détection des séries des "ID_client". des fois,cette boucle affiche des ID qui ne se trouvent pas dans la table "Localite" en plus le 'début' et la 'fin' soit il sont '-1' ou '+1'. je m'explique: Paris : 1,2,3...200 St Denis : 1000. Lyon : 2000,2001...2030. Grenoble: 5000,5001,5002. il m'affiche: Paris : 1 ...199. St Denis:1001. Lyon : 2002,2029. Grenoble : rien. je ne sais pas où ça coince! Bien sûr j'ai remplacé Par 'Localite'. a+ Nabil |
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé
![]() ![]() |
@SergioMaster avait parfaitement compris ce que je voulais dire.
![]() FieldByName('Numero'), cela concerne une table selon vous ? D'où l'intérêt du débogage pas à pas... J'ai repris le principe de la méthode donnée par @SergioMaster pour l'adapter à des recherches de séquences. Cela donne : Code :
En passant, j'ai évité les appels trop nombreux à FieldByName('Numeros') en passant par une variable, car cela accélère le traitement.
__________________
Philippe. |
||
|
|
10
|
|
|
#15 | ||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 273 ![]() |
chouette, sauf que , c'est le principe inverse de ce qui était demandé
j'ai bien expliqué qu'il s'agissait d'une recherche de "trous" Citation:
je voyais déjà plutôt une requête genre Code SQL :
SELECT ID_CLIENT FROM LOCALITE ORDER BY LOCALITE,ID_CLIENT Citation:
@ phillipe Tu es sur qu'il y a une grosse différence de temps de traitement ?
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() said Développeur Delphi/c++/Omnis Inscription : décembre 2003 Messages : 1 794 ![]() |
bonjour,
sergio: pourquoi le distinct dans la roquet? normalement numéro doit être unique ![]() en plus, je crois que Frédéric Brouard à déjà crée une procédure stocké pour sql server qui fais la recherche des trous, si mémoire est bon ![]() ![]() dans tout les cas, tu as pris ta procédure de l'autre siècle et tu la mis tel quel, hhhhhhh
__________________
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS |
|
|
00
|
|
|
#17 | |
|
Membre Expert
![]() said Développeur Delphi/c++/Omnis Inscription : décembre 2003 Messages : 1 794 ![]() |
Citation:
![]() je préfère cette solution, mais en la faison dans un boucle sur le nombre de localité, par example localité paris, on va parcourir tout les ligne si les qui sesuive de paris en va continuer , si il non, on va sauter les ligne jusqu'à trouver la localité paris
__________________
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS |
|
|
|
00
|
|
|
#18 | ||||
|
Expert Confirmé
![]() ![]() |
Citation:
Citation:
Citation:
Citation:
__________________
Philippe. |
||||
|
|
00
|
|
|
#19 | ||||
|
Membre éprouvé
![]() NABIL Enseignant Inscription : août 2008 Messages : 482 ![]() |
Bonjour à tous,
Citation:
.Citation:
@ Ph. B.: merci pour l'adaptation de la procédure de Serge! Chouette ,elle fonctionne .J'ai reconstruit les Tables pour éviter la redondance dans la base. Table: Clients: Id_Client, Nom_Client,Localité,... il me reste qu'à modeler cette procédure afin d'avoir mon objectif initial qui est de grouper les "Id_Clients" de chaque localité. tout ça dans la même procédure (je veux les afficher dans un Dbgrid) . Grâce à l'aide d'un ami, j'ai une requête qui détecte si y a un interval entre les id mais ça consomme des ressources et du temps aussi! Code :
+A Nabil |
||||
|
|
00
|
|
|
#20 | |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 273 ![]() |
Citation:
Quant au distinct , il y avait une raison , le numéro n'etait pas forcément unique (la clé étant composée , à l'époque d'une Année,Numéro et Type) si mes souvenirs sont encore justes
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com