Page 1 sur 1

fusion select

Posté : 14 mai 2012, 18:18
par kapaxa
bonjour tout le monde, je vais aller droit au but, j'ai une table `correct` avec 3 champs :

NUM_DEBITE; MT_DEBITE; C_REST

je voudrais fusionner ces deux select à savoir :

SELECT MT_DEBITE from correct WHERE MT_DEBITE>=C_REST
SELECT C_REST from correct WHERE MT_DEBITE<=C_REST

et avoir un seul champ avec la fusion des résultat des deux champs, c'est à dire à chaque ligne lu, il fait la comparaison et donne selon les deux en fonction du select.
J'ai essayer avec union mais çà ne me donne pas le résultat que je voudrais, j'aimerais bien avoir un coup de main afin que je puisse avancer dans mon projet, merci bien à tous

Re: fusion select

Posté : 14 mai 2012, 20:13
par moogli
Salut,

Ce n'est pas possible tu ne sélection ne pas les mêmes champs.
Sinon regarde du coté de union.


@+

Re: fusion select

Posté : 15 mai 2012, 08:44
par Mazarini
Ca se règle avec "as"
SELECT MT_DEBITE AS montant from correct WHERE MT_DEBITE>=C_REST
UNION
SELECT C_REST AS montant from correct WHERE MT_DEBITE<=C_REST
ou
SELECT MT_DEBITE, 0 AS C_REST AS from correct WHERE MT_DEBITE>=C_REST
UNION
SELECT 0 AS MT_DEBITE, C_REST from correct WHERE MT_DEBITE<=C_REST

Re: fusion select

Posté : 15 mai 2012, 10:04
par kapaxa
salut Mazarini, je viens d'essayer ta requête, c'est en partie ce que je veux mais le problème est qu'il élimine les doublons , ce qui ne m'arrange pas vraiment surtout pour le projet, car chaque montant est affecté à un numéros spécifique. je continue également les recherches de mon cotés, merci pour l'aide.

Re: fusion select

Posté : 15 mai 2012, 11:30
par dunbar
Ca se règle avec "as"
Moi j'aurais dit avec un alias parce que le as ne sert que de mot clé a la création de celui-ci et qu'il est optionnel

Ok je suis dejà dehors :langue:

Re: fusion select

Posté : 15 mai 2012, 12:06
par kapaxa
salut dunbar, l'alias revient au meme que le AS, çà ne regle pas vraiment le problème, voici un peu ce que je voudrais avoir, on n'a la table correct comme suit


NUM_DEBITE MT_DEBITE C_REST
------------ ------------- ----------
1 100 101
2 20 19
3 200 150
4 25 75

et le resultat que j'aimerais avoir après le select est celui ci :

NUM_DEBITE MONTANT
------------ -------------
1 101
2 20
3 200
4 75

comme çà vous avez une idée de ce que je veux obtenir comme résultat en fait. merci à tout le monde

Re: fusion select

Posté : 15 mai 2012, 12:13
par dunbar
salut dunbar, l'alias revient au meme que le AS, çà ne regle pas vraiment le problème, voici un peu ce que je voudrais avoir, on n'a la table correct comme suit
Je voulais dire que le AS ne veut rien dire on appelle cela un alias (mais soit)
Quand a ton soucis pourquoi ne pas faire simplement un GROUP BY NUM_DEBITE

Exemple :
SELECT MT_DEBITE AS montant FROM correct WHERE MT_DEBITE>=C_REST
 UNION
 SELECT C_REST AS montant FROM correct WHERE MT_DEBITE<=C_REST
GROUP BY NUM_DEBITE
 

Re: fusion select

Posté : 15 mai 2012, 12:43
par kapaxa
dunbar, pourrais tu etre un peu plus explicite, en donnant plus de détails à ton message, merci bien comme j'ai affiché les données

NUM_DEBITE MT_DEBITE C_REST
------------ ------------- ----------
1 100 101
2 20 19
3 200 150
4 25 75
et avoir ceci
NUM_DEBITE MONTANT
------------ -------------
1 101
2 20
3 200
4 75
bien evidement en ne supprimant pas les doublons sinon mes données risquent d'etre fausses

Re: fusion select

Posté : 15 mai 2012, 18:52
par Mazarini
Effectivement alias est plus approprié, mais j'ai séché les cours de francais :oops:

Autrement, je ne comprends pas le problème des doublons ?
Normalement il y a les égalités entre les 2 montants qui sortent en double. Si tu veux en supprimer un, met < au lieu de <=.

Re: fusion select

Posté : 15 mai 2012, 20:18
par kapaxa
bien je vais rallonger un peu mon exemple pour que tu puisses voir un peu ce que je qualifie de doublon

NUM_DEBITE MT_DEBITE C_REST
------------ ------------- ----------
1 100 101
2 20 19
3 200 150
4 25 75
5 200 60
6 125 125
7 75 200
8 200 200

et avoir ceci
NUM_DEBITE MONTANT
------------ -------------
1 101
2 20
3 200
4 75
5 200
6 125
7 200
8 200

quand tu regarde le resultat, on retrouve le 200 sur plusieurs ligne alors or quand je fais:
 
(SELECT MT_DEBITE AS montant FROM correct WHERE MT_DEBITE>=C_REST)
UNION
(SELECT C_REST AS montant FROM correct WHERE MT_DEBITE<=C_REST)
je remarque que le 200 n'est affiché que une seule fois et quand je fais
(SELECT MT_DEBITE AS montant FROM correct WHERE MT_DEBITE>=C_REST)
UNION ALL
(SELECT C_REST AS montant FROM correct WHERE MT_DEBITE<=C_REST)
les doublons ne sont pas supprimé les les résultats se duplique et n'est pas rangé dans l'ordre.

je ne sais pas si j'ai été assez explicite comme çà. à plus.

Re: fusion select

Posté : 16 mai 2012, 19:00
par kapaxa
bonsoir tout le monde, j'ai finalement trouvé la solution à mon problème, voici le code pour ceux à qui cela pourrait bien etre utile:

Code : Tout sélectionner

SELECT champ1, champ2, champ3, if( champ2 >= champ3,champ2, champ3 ) FROM correct
bonne soirée à tous.