2016-10-23 3 views
0

ich nach einem Weg suchen, um eine Access-Abfrage Kreuztabellen- Berichtsverkaufssummen von ‚Marke‘ für zwei verschiedene Datumsbereiche .:Zugang Crosstab Abfrage: basierend auf Verkaufssummen innerhalb von zwei Datumsbereiche

  • Für erstellen Vertrieb: "DISTID" (Spalte nicht sichtbar)
  • Umsatzsummen: "Sales" (Spalte)
  • zwei verschiedene Datumsbereiche: "depDate" für die Zeiträume 1 und 2 (Spalte):
    • 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]
  • Brands = "DprodBrand" (Zeilen)

Derzeit habe ich zwei separate Kreuztabellenabfragen für jede Periode, einwandfrei funktioniert. -> CODE UNTEN.

Ich bin auf der Suche nach einer Möglichkeit, eine Abfrage zu erstellen, die die Umsatzzahlen von Brand für jeden Datumsbereich in zwei separaten Spalten oder einer Kreuztabellenabfrage anzeigt.

Period1:

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); 

Vielen Dank !!! ~~ Jacob

+0

danken Ihnen allen für Ihre Ideen und die Zusammenarbeit! Ich schätze Ihre Unterstützung und Anwesenheit in diesem Bemühen sehr! ============== ** Akzeptierte Lösung von: Dale Fye (Access MVP) 2016-10-24 ** Ich bin mir nicht sicher, dass Sie ein CrossTab dafür benötigen. 'Select DProdBrand, SUM (IIF ([DepDate] BETWEEN [Formulare]! [FrmRpt_YTDDepl_SF]! [BDT1] UND [[Formen]! [FrmRPT_YTDDepl_SF]![EDT1], [Verkauf], 0) als Period1, SUM (IIF ([DepDate] Zwischen [Formulare]! [FrmRPT_YTDDepl_SF]! [BDT2] AND [Formulare]! [FrmRPT_YTDDepl_SF]! [EDT2], [Sales] , 0) als Periode2, SUM ([Umsatz]) als [Umsatzsumme] VON yourTable GROUP BY DProdBrand' – ManyCurrents

Antwort

0

Von: Dale Fye (Access MVP):

ich Ihnen eine CrossTab dafür bin nicht sicher brauchen.

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

einfach Betrachten wir die beiden gerettet, Kreuztabellen- Abfragen wie jedes andere Paar von Abfragen oder Tabellen mit dem DprodBrand als Verbindungsschlüssel Beitritt:

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 

Nun, wenn Sie nur eine Abfrage wollen, es zu tun Betrachten Sie die bedingte Aggregat-Pivot-Abfrage, da Kreuztabellen nicht als Unterabfragen verwendet werden können. Hier können Sie wandern WHERE-IIF() Bedingungen:

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

Da es sich um Zugang, könnte es einfacher sein, die beiden Abfragen, um die ORDER BY Weglassen zu speichern.

dann eine neue Abfrage erstellen:

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