Afficher b en face de a

Fermé
mkymky - 27 août 2016 à 11:46
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 9 sept. 2016 à 10:00
Bonjour les Ingénieurs. c'est encore moi, je ne me lacerai pas tant que vous existez. j'ai besoin de votre aide, j'utilise sql server 2014, dans ma base j'ai une table Colis qui contient le numero, la date, le client, la quantite (Qtecolis) et la categorie. la seule colonne Qtecolis contient la quantité recue si la categorie est rec, la quantite livrée si la categorie est liv. je veux afficher la quantité livrée en face de la quantité recue. voici ma requete: select COLIS.Numcolis, COLIS.Datecolis, COLIS.ClientID, COLIS.Qtecolis as Qte_recue, COLIS.Poids,
(select (COLIS.Qtecolis) from COLIS where COLIS.Categorie = 'liv') as qte_livrée
from colis
where COLIS.Categorie = 'rec'
group by COLIS.Numcolis, COLIS.Datecolis, COLIS.ClientID, COLIS.Poids, COLIS.Qtecolis
having count (COLIS.Numcolis) = 1 ;

Et j'ai ce message d’erreur: "La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression."
je vous demande de l'aide, svp ne m'abandonnez pas, je compte sur vous. merci beaucoup.
A voir également:

5 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
30 août 2016 à 09:38
Bonjour,

En supposant que ton identifiant de colis soit Numcolis, je te propose la requête suivante :
SELECT r.NumColis, r.DateColis, r.ClientID, r.QteColis as Qte_recue, r.Poids, l.QteColis as Qte_Livree
FROM Colis r
LEFT OUTER JOIN Colis l ON r.NumColis = l.NumColis
WHERE r.Categorie = 'rec' AND l.Categorie = 'liv'


Par contre, tu devrais vraiment penser à mettre deux colonnes, une pour chaque quantité, non ? Ce serait quand même plus simple... Ou alors deux tables, une pour les envois une pour les réceptions si tu veux faire varier d'autres paramètres (la date d'envoi / de réception, le poids à l'envoi / à la réception...)

Xavier
0
Bonjour Reivax962.
merci pour votre intérêt, pour la réponse. je vais l'essayer et vous dire quoi. quand à la proposition, c'est ce que j'avais fait et je m’étais encore buté à des problèmes, toute fois, je vais reconsidérer tout ça et vous mettre au courant. en tout cas merci beaucoup.
0
bonjour Xavier, je viens de vérifier le résultat; il est vrai que ça me donne b en face de a, mais si j'utilise AND il ne me donne aucune donnée et si j'utilise OR il donne toutes les données sur a et sur b aussi. ce que je veux, ce qu'il me donne les quantités reçues sur a uniquement et les quantités livrées sur b uniquement afin que je puisse les comparer.
si ceci n'est pas possible si les sont dans une seule table, proposez moi un autre modèle qui pourrait m'aider. En tout cas, merci beaucoup pour l'aide que vous m'apporter, ça m'a déjà beaucoup aidé.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
30 août 2016 à 13:21
Bonjour,

Je pense que le problème vient de la règle de jointure.
J'ai utilisé "r.NumColis = l.NumColis" mais je ne suis pas sûr que ce soit la bonne règle, ne connaissant pas exactement ta structure de données.

Pour corriger, il faudrait que tu me dises exactement comment tu fais correspondre une ligne REC avec une ligne LIV.

Xavier
0
Merci Xavier. pour faire correspondre la ligne rec à la ligne liv, j'utilise le champ: ClientID. Merci beaucoup Vraiment.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
30 août 2016 à 16:28
Client seul ? Il ne peut pas y avoir plusieurs commandes pour un seul client ?
ClientID + Date, peut-être ?

Bon, avec ClientID tout seul, la requête deviendrait
SELECT r.NumColis, r.DateColis, r.ClientID, r.QteColis as Qte_recue, r.Poids, l.QteColis as Qte_Livree
FROM Colis r
LEFT OUTER JOIN Colis l ON r.ClientID = l.ClientID
WHERE r.Categorie = 'rec' AND l.Categorie = 'liv'


Xavier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonsoir Xavier, maintenant ça me donne les rec sur une colonne et les liv sur une autre; seulement il y a une redondance. ça se double sur tous les deux colonnes. comment éliminer ça? Merci, franchement merci.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 sept. 2016 à 13:43
Salut,

Est-ce que tu parles de lignes en doublons, ou est-ce que ce sont les quantités qui sont x2 ?

Dans le premier cas, il y a sans doute d'autres critères à intégrer pour les éliminer (deux lignes "rec" ou "liv" pour le même clientID ?)
Dans le deuxième cas, je sèche.

Xavier
0
mkymky > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
5 sept. 2016 à 10:58
Ce sont de doublons. veuillez me proposé alors la deuxième critère, svp. Merci.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 sept. 2016 à 10:00
Bonjour,

Désolé pour le délai.
Pour votre problème, il faudrait savoir qu'est-ce qui peut permettre de différencier les lignes en double.
Prenez un clientID qui pose problème, et exécutez la requête suivante :
SELECT * FROM Colis WHERE ClientId = XXX
(ou XXX est le clientID choisi)

Donnez-moi le résultat (avec les en-têtes de colonne), pour que je voie ce qu'il faut faire.

Xavier
0