2016-10-23 1 views
0

Je cherche un moyen de créer un total des ventes de rapports de requête analyse croisée d'accès par « Marque », pour deux périodes différentes .:Accès Crosstab Requête: basé sur le total des ventes dans les deux plages de dates

  • Pour distributeur: "DistID" (colonne, non visible)
  • totaux des ventes: "Ventes" (colonne)
  • deux périodes différentes: "depDate" pour la période 1 et la période 2 (colonne):
    • Period1 = Between [forms]![frmRPT_YTDDepl_SF]![BDT1] And [forms]![frmRPT_YTDDepl_SF]![EDT1]
    • Period2 = Between [forms]![frmRPT_YTDDepl_SF]![BDT2] And [forms]![frmRPT_YTDDepl_SF]![EDT2]
  • Marques = "DprodBrand" (lignes)

Actuellement, j'ai deux requêtes distinctes pour chaque tableau croisé période, fonctionne correctement. -> CODE CI-DESSOUS.

Je suis à la recherche d'un moyen de créer UNE requête affichant les totaux des ventes de la marque pour chaque plage de dates, dans deux colonnes séparées ou une requête de tableau croisé.

Période1:

TRANSFORM Sum(tblDepletions_DETAIL.detQuan) AS Sales 
SELECT tblProducts_DEPL.DprodBrand 
FROM tblDepletions INNER JOIN (tblProducts_DEPL INNER JOIN  tblDepletions_DETAIL ON tblProducts_DEPL.DprodZSKU = tblDepletions_DETAIL.detZSKU) ON tblDepletions.depID = tblDepletions_DETAIL.detDeplID 
WHERE (((tblDepletions.depDate) Between [forms]![frmRPT_YTDDepl_SF]![BDT1]  And [forms]![frmRPT_YTDDepl_SF]![EDT1]) AND ((tblDepletions.depDistID)=132)) 
GROUP BY tblProducts_DEPL.DprodBrand 
ORDER BY tblProducts_DEPL.DprodBrand 
PIVOT Format([depDate],"yy")-(Format(Date(),"yy"))+2 In (1,2); 

Period2:

TRANSFORM Sum(tblDepletions_DETAIL.detQuan) AS Sales 
SELECT tblProducts_DEPL.DprodBrand 
FROM tblDepletions INNER JOIN (tblProducts_DEPL INNER JOIN tblDepletions_DETAIL ON tblProducts_DEPL.DprodZSKU = tblDepletions_DETAIL.detZSKU) ON tblDepletions.depID = tblDepletions_DETAIL.detDeplID 
WHERE (((tblDepletions.depDate) Between [forms]![frmRPT_YTDDepl_SF]![BDT2] And [forms]![frmRPT_YTDDepl_SF]![EDT2]) AND ((tblDepletions.depDistID)=132)) 
GROUP BY tblProducts_DEPL.DprodBrand 
ORDER BY tblProducts_DEPL.DprodBrand 
PIVOT Format([depDate],"yy")-(Format(Date(),"yy"))+2 In (1,2); 

Merci beaucoup !!! ~~ Jacob

+0

Merci à tous pour vos idées et la collaboration! J'apprécie grandement votre aide et votre présence dans cet effort! ============= ** Accepté Solutionby: Dale Fye (Access MVP) 2016-10-24 ** Je ne suis pas sûr que vous ayez besoin d'un CrossTab pour cela. 'Sélectionnez DProdBrand, SUM (IIF ([DepDate] ENTRE [Formulaires]! [FrmRpt_YTDDepl_SF]! [BDT1] ET [[forms]! [FrmRPT_YTDDepl_SF]![EDT1], [Sales], 0) as Period1, SOMME (IIF ([DepDate] Entre [formulaires]! [FrmRPT_YTDDepl_SF]! [BDT2] AND [formulaires]! [FrmRPT_YTDDepl_SF]! [EDT2], [Ventes] , 0) as Period2, SUM ([Ventes]) as [Total des ventes] FROM yourTable GROUP BY DProdBrand' – ManyCurrents

Répondre

0

par: Dale Fye (accès MVP):

Je ne suis pas sûr que vous avez besoin d'un tableau croisé pour cela.

Select DProdBrand, 
SUM(IIF([DepDate] BETWEEN [Forms]![frmRpt_YTDDepl_SF]![BDT1] 
AND [[forms]![frmRPT_YTDDepl_SF]![EDT1], [Sales], 0) as Period1, 
SUM(IIF([DepDate] Between [forms]![frmRPT_YTDDepl_SF]![BDT2] 
AND [forms]![frmRPT_YTDDepl_SF]![EDT2], [Sales], 0) as Period2, 
SUM([Sales]) as [Sales Total] 
FROM yourTable 
GROUP BY DProdBrand 

https://www.experts-exchange.com/questions/28978325/Access-Crosstab-Query-based-on-sales-totals-within-TWO-date-ranges.html

0

Pensez à vous joindre simplement les deux enregistrées, les requêtes comme tout autre tableau croisé paire de requêtes ou tables en utilisant la DprodBrand comme clé de jointure:

SELECT CrosstabQ1.DprodBrand, 
     CrosstabQ1.[1] As Period1_Year1, CrosstabQ2.[1] As Period2_Year1, 
     CrosstabQ1.[2] As Period1_Year2, CrosstabQ2.[2] As Period2_Year2 
FROM CrosstabQ1 
INNER JOIN CrosstabQ2 ON CrosstabQ1.DprodBrand = CrosstabQ2.DprodBrand 

Maintenant, si vous voulez qu'une seule requête à faire tous, considérons la requête pivot cumulative conditionnelle car les tableaux croisés ne peuvent pas être utilisés comme sous-requêtes. Ici vous migrez WHERE à IIF() conditions:

SELECT p.DprodBrand, 
     SUM(IIF((d.depDate BETWEEN [Forms]![frmRPT_YTDDepl_SF]![BDT1] 
           AND [Forms]![frmRPT_YTDDepl_SF]![EDT1]) 
       AND (Format(d.[depDate],"yy")-(Format(Date(),"yy"))+2 = 1), 
       dt.detQuan, NULL)) AS Period1_Year1, 

     SUM(IIF((d.depDate BETWEEN [Forms]![frmRPT_YTDDepl_SF]![BDT2]  
           AND [Forms]![frmRPT_YTDDepl_SF]![EDT2) 
       AND (Format(d.[depDate],"yy")-(Format(Date(),"yy"))+2 = 1), 
       dt.detQuan, NULL)) AS Period2_Year1, 

     SUM(IIF((d.depDate BETWEEN [Forms]![frmRPT_YTDDepl_SF]![BDT1] 
           AND [Forms]![frmRPT_YTDDepl_SF]![EDT1]) 
       AND (Format(d.[depDate],"yy")-(Format(Date(),"yy"))+2 = 2), 
       dt.detQuan, NULL)) AS Period1_Year2, 

     SUM(IIF((d.depDate BETWEEN [Forms]![frmRPT_YTDDepl_SF]![BDT2]  
           AND [Forms]![frmRPT_YTDDepl_SF]![EDT2]) 
       AND (Format(d.[depDate],"yy")-(Format(Date(),"yy"))+2 = 2), 
       dt.detQuan, NULL)) AS Period2_Year2 

FROM tblDepletions d 
INNER JOIN (tblProducts_DEPL p 
INNER JOIN tblDepletions_DETAIL dt 
    ON p.DprodZSKU = dt.detZSKU) 
    ON d.depID = dt.detDeplID 

WHERE ((d.depDistID)=132) 
GROUP BY p.DprodBrand 
ORDER BY p.DprodBrand 
0

Comme il est l'accès, il pourrait être plus simple d'enregistrer les deux requêtes en laissant la ORDER BY.

Ensuite, créez une nouvelle requête:

SELECT * 
FROM Q1 
UNION ALL 
SELECT * 
FROM Q2 
ORDER BY DprodBrand