DEMANDE REQUETE SQL
TCHITCHOO
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
fiu -
fiu -
Bonjour,
Je suis entrain de développer une application "Gestion Commerciale" sous VB.NET et qui utilise le SQL Server comme SGBD.
J'ai beaucoup de difficultés en langage SQL, et mon problème consiste à créer une requète SQL qui permet d'afficher les "lignes Réception" de chaque "BON DE RECEPTION":
----------------------------------------------------------------
Qté | DESIGNATION (Disque/Abrasif)| Observation|
----------------------------------------------------------------
La structure de mes tables est:
Table "Bon de Reception"([N° RECEPT], [DATE RECEPT])
Table "Ligne Reception" ([N° LIG RECPT], REF, QTE, OBSERVATION,[N° RECEPT])
Table "Article" (REF, PUTTC)
Table "Disque"(REF, DESIGNATION)
Table "Abrasif"(REF, DESIGNATION)
J'attends vos solutions, et merci d'avance ;)
Imagination is more important than knowledge
Je suis entrain de développer une application "Gestion Commerciale" sous VB.NET et qui utilise le SQL Server comme SGBD.
J'ai beaucoup de difficultés en langage SQL, et mon problème consiste à créer une requète SQL qui permet d'afficher les "lignes Réception" de chaque "BON DE RECEPTION":
----------------------------------------------------------------
Qté | DESIGNATION (Disque/Abrasif)| Observation|
----------------------------------------------------------------
La structure de mes tables est:
Table "Bon de Reception"([N° RECEPT], [DATE RECEPT])
Table "Ligne Reception" ([N° LIG RECPT], REF, QTE, OBSERVATION,[N° RECEPT])
Table "Article" (REF, PUTTC)
Table "Disque"(REF, DESIGNATION)
Table "Abrasif"(REF, DESIGNATION)
J'attends vos solutions, et merci d'avance ;)
Imagination is more important than knowledge
A voir également:
- DEMANDE REQUETE SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
8 réponses
Salut,
Donc, la méga requête pour afficher Qté, DESIGNATION (Disque/Abrasif), Observation est
Mais je persiste : tes tables Disque & Abrasif sont une véritable hérésie. Ça frise la faute professionnelle.
Si tu avais une table supplémentaire Famille ou Catégorie qui liste familles ou catégories et des zones supplémentaires dans Article où soient stockées la famille ou catégorie, la désignation et toutes les caractéristiques supportables par tes différentes familles ou catégories (ie la catégorie DISQUE a 8 attributs numériques alors qu'Abrasif en a 12, ça te donne 12 attributs numériques dans Article), la requête est alors
Donc, la méga requête pour afficher Qté, DESIGNATION (Disque/Abrasif), Observation est
SELECT qte , '(' || CASE WHEN dd.designation IS NULL THEN '' ELSE dd.designation END || CASE WHEN aa.designation IS NULL THEN '' ELSE aa.designation END || ')' desig , observation FROM [Bon de Reception] br, [Ligne Reception] lr, article a LEFT OUTER JOIN disque dd on lr.ref = dd.ref LEFT OUTER JOIN abrasif aa on lr.ref = aa.ref WHERE br.[N° RECEPT] = lr.[N° RECEPT] AND lr.ref = a.ref;Il te reste alors à ajouter un AND pour filtrer sur la date ou des numéros et tu auras ta liste.
Mais je persiste : tes tables Disque & Abrasif sont une véritable hérésie. Ça frise la faute professionnelle.
Si tu avais une table supplémentaire Famille ou Catégorie qui liste familles ou catégories et des zones supplémentaires dans Article où soient stockées la famille ou catégorie, la désignation et toutes les caractéristiques supportables par tes différentes familles ou catégories (ie la catégorie DISQUE a 8 attributs numériques alors qu'Abrasif en a 12, ça te donne 12 attributs numériques dans Article), la requête est alors
SELECT qte, designation, observation FROM [Bon de Reception] br, [Ligne Reception] lr, article a WHERE br.[N° RECEPT] = lr.[N° RECEPT] AND lr.ref = a.ref;
Salut,
Avant de formuler une réponse, il faut préciser
1. comment faire le lien entre [N° LIG RECPT] & [N° RECEPT]
2. à quoi servent les tables Disque & Abrasif ?
Avant de formuler une réponse, il faut préciser
1. comment faire le lien entre [N° LIG RECPT] & [N° RECEPT]
2. à quoi servent les tables Disque & Abrasif ?
1. Un Bon de réception contient juste Le N° et la date de réception du stock, mais les autres informations (càd la Qté et la désignation des articles) doivent être mentionnées dans une ou plusieurs Ligne réception.
2. Les tables "Disque" & "Abrasif" sont deux types différents d'article. (notion d'héritage)
je pense que tout est clair maintenant, et à vous de jouer !!!
2. Les tables "Disque" & "Abrasif" sont deux types différents d'article. (notion d'héritage)
je pense que tout est clair maintenant, et à vous de jouer !!!
Salut,
J'ai quand même un peu peur de t'aiguiller sur une mauvaise voie. As-tu aussi prévu une table Lubrifiant ? et une table Mèche ? et une table Visserie ? et une table Joint ? et une table...
Avoue que ce serait dommage que l'on t'indique quelque chose et que ce ça s'envoie en l'air à cause d'une table que l'on ajoute
J'ai quand même un peu peur de t'aiguiller sur une mauvaise voie. As-tu aussi prévu une table Lubrifiant ? et une table Mèche ? et une table Visserie ? et une table Joint ? et une table...
Avoue que ce serait dommage que l'on t'indique quelque chose et que ce ça s'envoie en l'air à cause d'une table que l'on ajoute
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Un jour, la société va s'agrandir. Et agrandira sa gamme au passage.
Comment le logiciel va-t-il digérer cette évolution ?
Traditionnellement, on se contente d'ajouter des attributs optionnels dans Article, voire de prévoir des attributs inutilisés aujourd'hui qui le seront plus tard. L'évolution ci-dessus passe alors par l'utilisation de ces attributs sur-numéraires, sans réécriture de code.
Un jour, la société va s'agrandir. Et agrandira sa gamme au passage.
Comment le logiciel va-t-il digérer cette évolution ?
Traditionnellement, on se contente d'ajouter des attributs optionnels dans Article, voire de prévoir des attributs inutilisés aujourd'hui qui le seront plus tard. L'évolution ci-dessus passe alors par l'utilisation de ces attributs sur-numéraires, sans réécriture de code.
Salut,
C'était une réponse à la question "Pense-tu que c'est faux de raisonner comme ça ?"
Quel que soit le schéma retenu, il faut de toute façon pouvoir établir un lien entre un bon de réception et une ligne d'un bon de réception : si je prends une ligne au hasard dans ta table Ligne de réception, comment faire pour trouver le bon de réception auquel la ligne est rattachée ?
C'était une réponse à la question "Pense-tu que c'est faux de raisonner comme ça ?"
Quel que soit le schéma retenu, il faut de toute façon pouvoir établir un lien entre un bon de réception et une ligne d'un bon de réception : si je prends une ligne au hasard dans ta table Ligne de réception, comment faire pour trouver le bon de réception auquel la ligne est rattachée ?
Je "plussoie" les commentaires faits plus haut : une requête SQL ne peut fonctionner que si l'analyse faite autour de la problématique est correcte. Les deux sont liés. Il faut donc commencer par la vérification de l'analyse, pour éviter d'avoir tout simplement de faux résultats dans les requêtes SQL.
Salut,
peut-être faut-il isoler les prédicats des join avec des parenthèses ?
en fait, je travaille majoritairement avec DB2 qui est suffisamment intelligent pour ne pas avoir besoin de parenthèses et avec oracle ou j'utilise une syntaxe non standard mais bien plus simple.
Et là, honnêtement, je vois pas pourquoi tu te prends cette erreur !
peut-être faut-il isoler les prédicats des join avec des parenthèses ?
SELECT qte , '(' || CASE WHEN dd.designation IS NULL THEN '' ELSE dd.designation END || CASE WHEN aa.designation IS NULL THEN '' ELSE aa.designation END || ')' desig , observation FROM [Bon de Reception] br, [Ligne Reception] lr, article a LEFT OUTER JOIN disque dd on (lr.ref = dd.ref) LEFT OUTER JOIN abrasif aa on (lr.ref = aa.ref) WHERE br.[N° RECEPT] = lr.[N° RECEPT] AND lr.ref = a.ref;
en fait, je travaille majoritairement avec DB2 qui est suffisamment intelligent pour ne pas avoir besoin de parenthèses et avec oracle ou j'utilise une syntaxe non standard mais bien plus simple.
Et là, honnêtement, je vois pas pourquoi tu te prends cette erreur !
Tout d'abord je te remercie pour les réponses à mes questions et pour ton effort, et après la saisie de la 1ère requête le compilateur a détecté cette erreur:
"L'identificateur en plusieurs parties "lr.ref" ne peut pas être lié."
au niveau du:
LEFT OUTER JOIN disque dd on lr.ref = dd.ref
LEFT OUTER JOIN abrasif aa on lr.ref = aa.ref
A ton avis, quelle est l'origine de cette erreur ?
Merci d'avance.