Académique Documents
Professionnel Documents
Culture Documents
* HEC Montréal
* Travail Pratique 2
* Enseignant :
* J01 : Bogdan Negoita
*
* Instructions de remise :
* - Répondre aux questions SQL directement dans ce
fichier .sql
* - À remettre via ZoneCours dans l'outil de remise
de travaux
* - Date de remise : voir les dates sur ZoneCours,
aucun retard permis
*
* Correction :
* - 10% de la note finale, /10
* - Une question qui génère une erreur (ne
s'exécute pas) se verra attribuer automatiquement la note de 0.
* Par conséquent, testez votre code
fréquemment !
*/
use AdventureWorks2019
go
/*
Question #1 :
Le directeur de l’approvisionnement vient vous voir avec
une demande d'information. Il vous explique que tous les produits
d’AdventureWorks
sont en inventaire dans des entrepôts de l’entreprise.
Il aurait toutefois besoin de savoir quels sont les produits dont le
nombre en
inventaire est sous le niveau sécuritaire de stock
(SafetyStockLevel). Comme vous partez en vacances, il vous demande de
lui créer une vue
(vw_ProductInvDeficit) qui donnera cette info, comme ça
il pourra facilement aller chercher l’information durant votre absence.
/*
Question #2 :
AdventureWorks aimerait mettre en œuvre le modèle de
vitalité ("The vitality model") de l'ancien président-directeur général
de General Electric,
Jack Welch, qui a été décrit comme un système "20-70-
10". Les "20% les plus importants" des employés sont les plus productifs
et 70% (les "70
indispensables") travaillent correctement. Les 10%
restants sont des non-producteurs et doivent être licenciés.
select
*,
Decile_Description =
case VirtualTable.Decile
when 1 then 'Excellente performance !'
when 2 then 'Ça pourrait être mieux...'
when 10 then 'Cherchez vous un emploi ailleurs !'
else 'Décile inconnu'
end
from
(
select
soh.SalesPersonID,
e.NationalIDNumber,
p.FirstName,
p.LastName,
format(sum(soh.SubTotal), 'c', 'en-us') as 'Somme du
sous-total vendu',
format(round(percent_rank() over(order by
sum(soh.SubTotal) desc), 2), 'p') as 'Rang en pourcentage',
concat(format(round(percent_rank() over(order by
sum(soh.SubTotal) desc), 2), 'p'), ' de vos collègues ont fait mieux que
vous') as 'Explication du pourcentage',
ntile(10) over(order by sum(soh.SubTotal) desc) as
[Decile]
from Sales.SalesOrderHeader soh
inner join Sales.SalesPerson sp1 on soh.SalesPersonID =
sp1.BusinessEntityID
inner join HumanResources.Employee e on sp1.BusinessEntityID =
e.BusinessEntityID
inner join Person.Person p on e.BusinessEntityID =
p.BusinessEntityID
where datepart(quarter, soh.OrderDate) = 4
group by soh.SalesPersonID, e.NationalIDNumber, p.FirstName,
p.LastName
) as VirtualTable
where VirtualTable.Decile in ('1','2','10')
/*
Question #3 :
AdventureWorks voudrait explorer les achats jumelés
effectués par ses clients. On s'interesse particulièrement aux autres
produits qui ont
été achetés en même temps qu'un "All-Purpose Bike Stand"
(ProductNumber ST-1401). Donc, les données doivent être affichées
seulement pour
les ventes faites aux clients qui ont achetés ce type de
support de vélo.
ProductID |Name
|ProductNumber |OrderCount |Rang
873 |Patch Kit/8 Patches |
PK-7098 |98 |1
922 |Road Tire Tube
|TT-R982 |83 |2
921 |Mountain Tire Tube
|TT-M928 |54 |3
... |...
|... |... |...
/*
Question #4 a) :
On vous demande de fournir une requête affichant les
détails suivants sur les fournisseurs actifs, sans statut privilégié,
chez
lesquels AdventureWorks a fait 30 commandes ou plus.
Affichez :
- L'identifiant du fournisseur
- La date de la commande
- Un numéro de séquence attribué à chaque
commande faite auprés du fournisseur, en débutant avec la plus récente
commande
- Le sous-total de chaque commande (formaté en
dollars, c.-à-d. $xxx.xx)
*/
select poh.VendorID
, poh.OrderDate
, row_number() over(partition by poh.VendorID order by
poh.OrderDate desc) as 'RowNum'
, format(poh.SubTotal, 'c', 'en-us') as 'Order subtotal'
from Purchasing.PurchaseOrderHeader poh
inner join Purchasing.Vendor v on poh.VendorID = v.BusinessEntityID
where v.ActiveFlag = 1
and v.PreferredVendorStatus = 0
and poh.VendorID in
(select VendorID from Purchasing.PurchaseOrderHeader group by
VendorID having count(PurchaseOrderID) >= 30)
/*
Question #4 b) :
AdventureWorks voudrait savoir qui parmi ces
fournisseurs réguliers (chez lesquels AdventureWorks a fait 30 commandes
ou plus) a
tendance à réduire ses prix. L'entreprise souhaite
utiliser ces informations afin de leur accorder le statut de
"fournisseur
privilégié". On émet ici l'hypothèse que les commandes
auprès d'un fournisseur restent stables à travers le temps et sont donc
toujours pour des produits/quantités similaires.
On voudra afficher :
- L'identifiant du fournisseur
- Le montant moyen des toutes les commandes
faites auprès du fournisseur
- Le montant moyen des trois commandes les plus
récentes faites auprès du fournisseur
- La différence entre le montant moyen des trois
commandes les plus récentes faites auprès du fournisseur et le montant
moyen des
toutes les commandes faites auprès du
fournisseur.