2017-03-09 2 views
1

Dans Access SQL, j'essaie ce qui devrait sembler une tâche simple en atteignant un pourcentage du total. Il y a 3 magasins d'articles (Sears, kmart & Mktpl) dont au cours d'une semaine donnée, je souhaite calculer leur pourcentage respectif du total basé sur le solde des ventes (tous peuvent être obtenus en utilisant un tableau - tbl_BUChannelReporting).Accéder à la requête SQL - Pourcentage du calcul total

Par exemple, la semaine 5 numéros fictifs - Sears 7000, Kmart 2500, mktpl 2000 les rapports suivants seraient retournés: sears 61%, Kmart 22%, mktpl 17%

Je tentais à l'origine pour créer un sous requête et n'obtenait nulle part donc j'essaie essentiellement de faire la somme des ventes sur l'un des magasins d'articles dans la semaine 5 divisé par la somme de tous les 3 ventes de magasin d'articles dans la semaine 5. Voici ma requête, qui me donne "ne peut pas avoir une fonction agrégée dans l'expression "erreur:

SELECT FY, FW, Rept_Chnl, BU_NM, Order_Store, Item_Store, CDBL(

SUM(IIF([item_store]="sears", revenue, IIF([item_store]="kmart", revenue, IIF([item_store]="mktpl", revenue,0))))/

(SUM(IIF([item_store]="sears",revenue,0)+SUM(IIF([item_store]="kmart",revenue,0)+SUM(IIF([item_store]="mktpl",revenue,0)))))) 

AS Ratios 
FROM tbl_BUChannelReporting 
WHERE FY = "2017" 
AND FW = 5 
GROUP BY FY, FW, Rept_Chnl, BU_NM, Order_Store, item_store 

Merci d'avance pour prendre le temps. C'est mon premier article ici et je ne me considère pas n'importe quoi, mais un débutant désireux d'apprendre des meilleurs et de voir comment cela se révèle.

Faites attention!

-D

Répondre

0

Tenir compte en utilisant deux tables dérivées ou des requêtes enregistrées globales: un que les groupes sur Item_Store et l'autre qui ne comprend pas Item_Store pour résumer les recettes des magasins au total. Tous les autres groupes (FY, FW, Rept_Chnl, BU_NM, Order_Store) restent à la fois et utilisés pour joindre les deux. Ensuite, dans une requête externe, calculez le pourcentage.

SELECT i.*, CDbl(i.Store_Revenue/a.Store_Revenue) As Ratios 
FROM 
    (SELECT t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store, t.Item_Store, 
      SUM(t.Revenue) As Store_Revenue 
    FROM tbl_BUChannelReporting t 
    WHERE t.FY = '2017' AND t.FW = 5 
    GROUP BY t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store, t.Item_Store) As i 
INNER JOIN 
    (SELECT t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store 
      SUM(t.Revenue) As Store_Revenue 
    FROM tbl_BUChannelReporting t 
    WHERE t.FY = '2017' AND t.FW = 5 
    GROUP BY t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store) As a 
ON i.FY = a.FY AND i.FW = a.FW AND i.Rept_Chnl = a.Rept_Chnl 
AND i.BU_NM = a.BU_NM AND i.Order_Store = a.Order_Store 

Ou enregistrer chaque déclaration ci-dessus SELECT comme sa propre requête et référence à la fois ci-dessous:

SELECT i.*, (i.Store_Revenue/a.Store_Revenue) As Ratios 
FROM 
    Indiv_Item_StoreAggQ As i 
INNER JOIN 
    All_Item_StoreAggQ As a 
ON i.FY = a.FY AND i.FW = a.FW AND i.Rept_Chnl = a.Rept_Chnl 
AND i.BU_NM = a.BU_NM AND i.Order_Store = a.Order_Store 
+0

Merci beaucoup pour la clarification et j'apprécie Parfait la réponse rapide! – Andronomous