Objectif de cette étape #
Nous allons construire la requête détaillée qui servira au tableau des commandes.
Cette première requête est volontairement la plus complète. Elle permet de comprendre les relations entre les tables avant de créer les indicateurs agrégés.
Créer la requête dans BiBOARD #
Dans l’interface de gestion des requêtes :
- créez une nouvelle requête ;
- sélectionnez la connexion Demonstration ;
- nommez la requête :
PARCOURS_01_DETAIL_COMMANDES
- créez un paramètre texte nommé :
pPays
- définissez sa valeur par défaut à :
#NULL
- saisissez la requête SQL suivante.
Requête SQL #
SELECT
CAST(co.NumCommande AS varchar(20))
+ '-'
+ CAST(p.CodeProduit AS varchar(20)) AS CleLigne,
co.NumCommande,
co.DateCommande,
cl.CodeClient,
cl.RaisonSociale AS Client,
cl.Pays,
p.CodeProduit,
p.NomProduit,
cat.NomCategorie AS Categorie,
cd.Quantite,
cd.Prix AS PrixUnitaire,
cd.Remise,
CAST(
cd.Prix * cd.Quantite
AS decimal(18, 2)
) AS MontantBrut,
CAST(
cd.Prix * cd.Quantite * (1 - cd.Remise)
AS decimal(18, 2)
) AS MontantNet
FROM Demonstration.dbo.Commandes AS co
INNER JOIN Demonstration.dbo.Clients AS cl
ON cl.CodeClient = co.CodeClient
INNER JOIN Demonstration.dbo.Commandes_Details AS cd
ON cd.NumCommande = co.NumCommande
INNER JOIN Demonstration.dbo.Produits AS p
ON p.CodeProduit = cd.CodeProduit
INNER JOIN Demonstration.dbo.Categories AS cat
ON cat.CodeCategorie = p.NumCategorie
WHERE co.DateCommande IS NOT NULL
AND (
:pPays = '#NULL'
OR cl.Pays = :pPays
)
ORDER BY
co.DateCommande DESC,
co.NumCommande DESC,
p.NomProduit;
Comprendre le bloc SELECT #
Le bloc SELECT définit les colonnes retournées par la requête.
co.NumCommande,
co.DateCommande
Ces champs identifient et datent la commande.
cl.RaisonSociale AS Client,
cl.Pays
Ils permettent d’afficher le client et son pays.
p.NomProduit,
cat.NomCategorie AS Categorie
Ils décrivent le produit et sa famille.
La clé de ligne #
CAST(co.NumCommande AS varchar(20))
+ '-'
+ CAST(p.CodeProduit AS varchar(20)) AS CleLigne
Une ligne de commande est identifiée par la combinaison :
Numéro de commande + Code produit
La clé obtenue pourra être utile pour identifier précisément une ligne dans un tableau ou lors de futures interactions.
Calculer le montant brut #
cd.Prix * cd.Quantite
Exemple :
Prix : 20 €
Quantité : 3
Montant brut : 60 €
Calculer le montant net #
cd.Prix * cd.Quantite * (1 - cd.Remise)
Exemple avec une remise de 10 % :
20 × 3 × (1 - 0,10)
= 60 × 0,90
= 54 €
Comprendre les jointures #
INNER JOIN Demonstration.dbo.Clients AS cl
ON cl.CodeClient = co.CodeClient
Cette jointure permet de retrouver le client d’une commande.
INNER JOIN Demonstration.dbo.Commandes_Details AS cd
ON cd.NumCommande = co.NumCommande
Cette jointure permet de retrouver les lignes de produits de la commande.
INNER JOIN Demonstration.dbo.Produits AS p
ON p.CodeProduit = cd.CodeProduit
Cette jointure permet de retrouver le nom du produit.
INNER JOIN Demonstration.dbo.Categories AS cat
ON cat.CodeCategorie = p.NumCategorie
Cette jointure permet de retrouver la catégorie du produit.
Comprendre le filtre #
WHERE co.DateCommande IS NOT NULL
Nous excluons les lignes ne possédant pas de date de commande.
AND (
:pPays = '#NULL'
OR cl.Pays = :pPays
)
Ce bloc signifie :
- si aucun pays n’est sélectionné, retourner tous les pays ;
- sinon, retourner uniquement le pays sélectionné.
La valeur spéciale #NULL est utilisée dans BiBOARD pour représenter un paramètre texte vide ou non renseigné.
Tester la requête #
Premier test #
Exécutez la requête avec :
pPays = #NULL
Vous devez obtenir des commandes de plusieurs pays.
Deuxième test #
Exécutez la requête avec un pays présent dans la base, par exemple :
France
Toutes les lignes retournées doivent alors concerner ce pays.
Points à vérifier #
- NumCommande est renseigné ;
- DateCommande est une date ;
- MontantBrut est supérieur ou égal à MontantNet ;
- Pays correspond au client ;
- une commande peut apparaître plusieurs fois lorsqu’elle contient plusieurs produits ;
- CleLigne ne doit pas être vide.
Résultat attendu
Vous disposez maintenant d’une requête détaillée présentant une ligne par produit commandé.
Captures #
- [Déclaration du paramètre pPays]
- [Aperçu du résultat de la requête]
Connexion base Demonstration #

Paramètre #

Résultat de la requête (= #NULL) #


Résultat de la requête (= France) #


