Bon. Mon titre n'est peut être pas clair mais je vais tenter de l'être ici.
Je travaille avec SQL server 8.
Je dois trouver le prix de produits dans ma table. Notre système ici a deux bases de prix. Méthode 1 et 2. La méthode 1 a priorité sur la méthode 2. Je fais donc deux requêtes, pour chacune des méthodes, que je join avec un UNION, comme ceci :
Ca semble pareil mais dans la réalité je n'ai pas le choix de faire deux requêtes séparées (pas les mêmes JOIN selon la méthode)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select groupe, methode, prix from table_name where methode = 1 UNION select groupe, methode, prix from table_name where methode = 2
Bref, cet union me renvoie la combinaison de prix par groupe pour chacune des méthodes s'il y a lieu :
Groupe......Methode.....Prix
13...........1...............17.58
13...........2...............12.45
15...........2...............18.97
Maintenant, ce que j'aimerais faire, c'est d'utiliser cette résultante afin d'obtenir le bon prix pour chacun des groupes. Donc dans mon exemple, j'aimerais obtenir ceci :
Groupe......Methode.....Prix
13...........1...............17.58
15...........2...............18.97
J'ai essayé de faire un min
Mais inévitablement ça ne me renvoit pas le bon prix.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select groupe, min(methode), prix from ( ma_requete_precedente ) as Test group by groupe, prix
La fonction TOP ne fait que retourner le premier enregistrement, j'aurais bien aimé que ceci fonctionne :
parce que tout ce que je veux, c'est le premier enregistrement trouvé par groupe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select top 1 groupe, prix from ( ma_requete_precedente ) as Test
Vous avez une idée de comment aborder le problème? J'aimerais éviter d'utiliser les tables temporaires (avec les tables # ca serait hyper facile).
Merci pour vos idées c'est toujours grandement apprécié![]()
Partager