0

Guys dans le cadre de mon travail en tant qu'analyste de support de données Je me forme pour devenir développeur de logiciels, mon mentor m'a donné un groupe de déclarations de test et celui-ci semble beaucoup plus avancé que tout ce que j'ai fait précédemment. La question est ...Blocage d'une expression de table commune pour calculer les commandes totales pour chaque catégorie de produit en utilisant NORTHWND

*

6) Ecrire une sous-requête ou expression de table commune pour calculer le total des commandes pour chaque catégorie de produits. cela va écrire une requête qui va ramener chaque nom de produit, le nombre total de commandes effectuées pour le produit et joindre à la sous-requête ou CTE pour calculer le pourcentage des ventes que ce produit représente de sa catégorie de produit. Par exemple, si la catégorie de savons a 2 produits; Soupe bleue et du savon rouge, soupe bleu avait 40 commandes et savons rouges avait 10 commandes j'attendre de voir les lignes suivantes: Nom du produit total Ordres% de la catégorie rouge savon 40 80%
Savon Bleu 10 20%

*

jusqu'à présent, j'ai réussi à obtenir ce qui suit, mais je suis mal à progresser au-delà de cette ...

;WITH [Products] (CategoryId, TotalNumberOfOrders) 
AS (

SELECT p.CategoryId, 
COUNT (OD.OrderID) as TotalNumberOfOrders 
FROM [dbo].[Products] p 
INNER JOIN [dbo].[Order Details] OD 
ON p.ProductID=OD.ProductID 
GROUP BY p.CategoryId) 

SELECT * From Products 

Toute aide serait Fantasti c! (J'utilise la base de données NORTHWND BTW)

Répondre

0

Je pense que ce dont vous avez besoin est

;WITH temp AS 
(
    SELECT p.CategoryId, 
      COUNT (DISTINCT OD.OrderID) as TotalNumberOfOrders 
    FROM [dbo].[Products] p 
    INNER JOIN [dbo].[Order Details] OD ON p.ProductID=OD.ProductID 
    GROUP BY p.CategoryId 
) 

SELECT p.ProductName, 
     Count(DISTINCT Od.OrderId) AS Total, 
     Count(DISTINCT Od.OrderId)*100/temp.TotalNumberOfOrders AS Percentage 
FROM Products p 
INNER JOIN [dbo].[Order Details] OD ON p.ProductId = OD.ProductId 
INNER JOIN temp ON p.CategoryId = temp.CategoryId 
GROUP BY p.ProductId, p.ProductName, temp.TotalNumberOfOrders 

Rappelez-vous Count(Distinct..) compter Order.

0

l'aide d'un sous-requêtes:

SELECT P.ProductName, 
     COUNT(OrderID) AS NumberOfOrders,  
     CAST((CAST(COUNT(OrderID) AS DECIMAL(9,2))/CAST(Derived_Table.CNT AS 
DECIMAL(9,2))) * 100 AS DECIMAL(9,2)) AS Percentage 
    FROM [Northwind].[dbo].[Order Details] 
     INNER JOIN dbo.Products AS P 
       ON [Order Details].ProductID = P.ProductID 
     INNER JOIN (SELECT COUNT(F.OrderID) AS CNT, P.CategoryID 
          FROM [Northwind].[dbo].[Order Details] F 
        INNER JOIN dbo.Products P 
        ON F.ProductID = P.ProductID 
        GROUP BY P.CategoryID) AS Derived_Table 
       ON P.CategoryID = Derived_Table.CategoryID     
    GROUP BY [Order Details].ProductID, P.ProductName, Derived_Table.CNT 
ORDER BY [Order Details].ProductID