fusion select

Petit nouveau ! | 6 Messages

14 mai 2012, 18:18

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mai 2012, 20:13

Salut,

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


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

15 mai 2012, 08:44

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

Petit nouveau ! | 6 Messages

15 mai 2012, 10:04

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.

ViPHP
ViPHP | 2291 Messages

15 mai 2012, 11:30

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Petit nouveau ! | 6 Messages

15 mai 2012, 12:06

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

ViPHP
ViPHP | 2291 Messages

15 mai 2012, 12:13

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
 
Modifié en dernier par dunbar le 15 mai 2012, 12:51, modifié 2 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Petit nouveau ! | 6 Messages

15 mai 2012, 12:43

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

ViPHP
ViPHP | 2577 Messages

15 mai 2012, 18:52

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 <=.

Petit nouveau ! | 6 Messages

15 mai 2012, 20:18

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.

Petit nouveau ! | 6 Messages

16 mai 2012, 19:00

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.