Afficher b en face de a

mkymky -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
mkymky
 
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
mkymky
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
mkymky
 
Merci Xavier. pour faire correspondre la ligne rec à la ligne liv, j'utilise le champ: ClientID. Merci beaucoup Vraiment.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
mkymky
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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 3672 Date d'inscription   Statut Membre Dernière intervention  
 
Ce sont de doublons. veuillez me proposé alors la deuxième critère, svp. Merci.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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