|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Bonjour,
Je voudrais faire une requête sur trois tables. J'ai une table de repère squi contient un ou plusieurs articles, une table d'articles qui contient une ou plusieurs matières premières et une table de matières. Je souhaiterai obtenir pour chaque repère les matières utilisées. Je peux donc les obtenir facilement obtenir : Code :
Résultat que je souhaiterais : Code :
Merci Grinvald |
||||
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour
pourrais tu, au moins, indiquer la requête qui a permis d'obtenir les résultats 1 (et éventuellement la structure simplifiée des tables) ![]() et la base de données utilisée
|
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
J'utilise une base SQL Server et voila la structure simplifié.
Code :
Code :
|
||||
|
|
00
|
|
|
#4 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
re
en utilisant "simplement ta requete" et en faisant une sous-requete Code :
reponse rapide, qui je suis sur pourrait etre optimisee (quelque chose ne me plait pas la dedans )
|
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Ta requête marche mais elle ne répond pas vraiment à mon besoin.
La requête ne garde que les valeurs en double. Ça marcherait nickel si j'avais toujours 2 articles rattachés, mais il se peut qu'il y en ait 1, 2, 3 ... C'est tout de suite plus chaud. |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
je ne comprends pas !
elle conserve pour tous les couples (nom, mp) pour lesquelles art se retrouve 2 fois et plus "HAVING Count(*) > 1" ce n'est pas ce tu voulais ? |
|
|
00
|
|
|
#7 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Tu peux utiliser les fonctions analytiques.
A priori (cf SQL de A à Z) sur SQL Server tu as la fonction COUNT avec fenêtrage de disponible ainsi que DENSE_RANK En gros tu dois ramener dans ta sous requete le nombre d'article ayant le même Repere et Mp (avec le COUNT fenetré) Tu dois aussi ramener le nombre d'article par repere (avec une autre sous requete ou un max sur un DENSE_RANK) Enfin tu as juste à ramener les lignes ou le premier nombre est égal au second si j'ai bien compris ta demande.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Oui mais ça ne gère pas le cas ou il n'y a qu'un article dans le repere. Car le count(*) va renvoyer 1 dans ce cas. Et il faut le remonter car il est commun avec lui meme.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
|
|
00
|
|
|
#9 | |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
salut
Citation:
dans ce cas n'ayant pas les fonctions de fenêtrage dans FIREBIRD, cela va m’être difficile de travailler dessus ![]() et même si en bossant un peu il y aurait moyen de trouver un truc "plus classique" je laisse le fenêtrage à l'ouvrage
|
|
|
|
00
|
|
|
#10 | ||
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Voici une solution Oracle avec un seul fenetrage.
J'ai simplifié les jointures entre tables pour me faire gagner du temps, mais c'est normalement pas génant pour le fond du problème. Il te reste à retrouver la bonne syntaxe chez toi. Code :
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
Merci bien
Je vais chercher un peu à partir de ta requête. Je vous tiens au courant. Encore merci
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Développeur informatique Inscription : mai 2011 Messages : 12 ![]() |
J'ai finalement utilisé SELECT CASE WHEN ...
Merci à tous et à une prochaine fois |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com