Sql 将1个聚合和值的MS Access图扩展为用户选择的最多5个聚合和值

Sql 将1个聚合和值的MS Access图扩展为用户选择的最多5个聚合和值,sql,ms-access,graph,aggregate,Sql,Ms Access,Graph,Aggregate,我有一个工作表单,它根据用户在访问表单中选择的值创建访问图报告-创建图形数据的SQL是: SELECT AccountBalances.RecDate, Sum(AccountBalances.[End Balance]) AS [SumOfEnd Balance], CombinedFSLineItems.[CFS LineDescription] FROM (CombinedFSLineItems INNER JOIN AccountNumbers

我有一个工作表单,它根据用户在访问表单中选择的值创建访问图报告-创建图形数据的SQL是:

SELECT AccountBalances.RecDate, 
       Sum(AccountBalances.[End Balance]) AS [SumOfEnd Balance], 
       CombinedFSLineItems.[CFS LineDescription]    
FROM (CombinedFSLineItems 
INNER JOIN AccountNumbers  
     ON CombinedFSLineItems.[CFS LineItem] = AccountNumbers.[CFS LineItem]) 
INNER JOIN AccountBalances 
     ON AccountNumbers.[Account#] = AccountBalances.[Account#]
GROUP BY AccountBalances.RecDate, 
         CombinedFSLineItems.[CFS LineDescription], 
         AccountBalances.StoreID, CombinedFSLineItems.[CFS LineItem]
HAVING (((AccountBalances.RecDate) >= [TempVars]![varStartDate] 
  AND (AccountBalances.RecDate) <= [TempVars]![varDate]) 
  AND ((AccountBalances.StoreID) = [TempVars]![varStoreID]) 
  AND ((CombinedFSLineItems.[CFS LineItem]) = [TempVars]![varCFSLineItem]));
  • 帐号待定

    StoreID, Account#, CFS LineItem  
    1, 101, 1  
    1, 102, 1 
    1, 103, 1  
    1, 104, 2  
    1, 105, 2  
    1, 106, 19  
    1, 107, 19  
    1, 108, 19  
    2, 101, 7  
    2, 102, 1  
    2, 106, 1  
    
  • 帐户余额待定

    Account#, StoreID, End Balance, RecDate  
    101, 1, 10,000.00, 1/1/2020  
    101, 1, 15,000.00, 2/1/2020    
    101, 1, 5,000.00, 12/1/2019  
    102, 1, 1,000.00, 1/1/2020  
    102, 1, 500.00, 2/1/2020  
    102, 1, 1,000.00, 12/1/2019  
    104, 1, 2,500.00, 1/1/2020  
    104, 1, 3,000.00, 2/1/2020  
    104, 1, 1,500.00, 12/1/2019  
    105, 1, 1,000.00, 1/1/2020  
    105, 1, 1,500.00, 2/1/2020  
    105, 1, 1,000.00, 12/1/2019  
    104, 2, 3,000.00, 1/1/2020  
    104, 2, 4,000.00, 12/1/2019  
    104, 2, 5,000.00, 2/1/2020  
    105, 2, 1,500.00, 1/1/2020  
    
    ***
    
  • 使用上述示例数据,如果用户选择了store 1和CFS LineItem 1以及CFS LineItem 2,则我需要一个包含两行的图形:

    • 第1行为CFS LineItem1,12-1-2月的值为6000 11000 15500
    • 第2行为CFS LineItem2,12-1-2月的值为2500 3500 4500
    我还想根据组合的FS LineItems表字段
    [CFS LineDescription]
    命名图中的行

    理想情况下,我可以创建一个SQL语句,用作Access报告图的源数据。如果需要VBA代码或宏,则可以

    谢谢

    因为通常遵循Excel pivot表数据模型,所以您只需要一个具有相同结构(即更多行)的较长查询,这可以通过一个包含更多临时变量的
    IN
    子句来处理

    考虑使用varCFSLineItem1-5变量进行以下调整。此外,下面的查询将具有的
    转换为
    WHERE
    ,并使用表别名以提高可读性,并在
    选择中的
    分组方式中重复相同的列。确保将图表调整到所需的字段:

    SELECT b.RecDate, 
           b.StoreID, 
           c.[CFS LineDescription],
           c.[CFS LineItem],
           SUM(b.[End Balance]) AS [SumOfEnd Balance]  
    
    FROM (CombinedFSLineItems c
    INNER JOIN AccountNumbers a
         ON c.[CFS LineItem] = a.[CFS LineItem]) 
    INNER JOIN AccountBalances b
         ON a.[Account#] = b.[Account#]
    
    WHERE (b.RecDate >= [TempVars]![varStartDate] 
      AND  b.RecDate <= [TempVars]![varDate]) 
      AND (b.StoreID = [TempVars]![varStoreID]) 
    
      AND (c.[CFS LineItem] IN ([TempVars]![varCFSLineItem1],
                                [TempVars]![varCFSLineItem2],
                                [TempVars]![varCFSLineItem3],
                                [TempVars]![varCFSLineItem4],
                                [TempVars]![varCFSLineItem5])
          )
    
    GROUP BY b.RecDate, 
             c.[CFS LineDescription], 
             b.StoreID, 
             c.[CFS LineItem]
    
    选择b.RecDate,
    b、 StoreID,
    c、 [CFS线路描述],
    c、 [CFS行项目],
    总和(b[期末余额])为[期末余额]
    FROM(组合的FSLineItems c
    内部联接帐号a
    在c上[CFS行项目]=a[CFS行项目])
    内部联接帐户b
    在a[帐户#]=b[帐户#]
    其中(b.RecDate>=[TempVars]![varStartDate]
    和b.RecDate因为通常遵循Excel数据透视表数据模型,所以您只需要使用相同结构的较长查询(即,更多行),这可以使用包含更多临时变量的
    子句中的
    来处理

    考虑使用varCFSLineItem1-5变量进行以下调整。此外,下面的查询将
    HAVING
    转换为
    WHERE
    ,并使用表别名以提高可读性,并在
    选择中的
    分组依据中重复相同的列。确保将图形调整为所需的字段:

    SELECT b.RecDate, 
           b.StoreID, 
           c.[CFS LineDescription],
           c.[CFS LineItem],
           SUM(b.[End Balance]) AS [SumOfEnd Balance]  
    
    FROM (CombinedFSLineItems c
    INNER JOIN AccountNumbers a
         ON c.[CFS LineItem] = a.[CFS LineItem]) 
    INNER JOIN AccountBalances b
         ON a.[Account#] = b.[Account#]
    
    WHERE (b.RecDate >= [TempVars]![varStartDate] 
      AND  b.RecDate <= [TempVars]![varDate]) 
      AND (b.StoreID = [TempVars]![varStoreID]) 
    
      AND (c.[CFS LineItem] IN ([TempVars]![varCFSLineItem1],
                                [TempVars]![varCFSLineItem2],
                                [TempVars]![varCFSLineItem3],
                                [TempVars]![varCFSLineItem4],
                                [TempVars]![varCFSLineItem5])
          )
    
    GROUP BY b.RecDate, 
             c.[CFS LineDescription], 
             b.StoreID, 
             c.[CFS LineItem]
    
    选择b.RecDate,
    b、 StoreID,
    c、 [CFS线路描述],
    c、 [CFS行项目],
    总和(b[期末余额])为[期末余额]
    FROM(组合的FSLineItems c
    内部联接帐号a
    在c上[CFS行项目]=a[CFS行项目])
    内部联接帐户b
    在a[帐户#]=b[帐户#]
    其中(b.RecDate>=[TempVars]![varStartDate]
    
    b.重新记录样本数据和期望的结果真的会有帮助。你想要添加、新列还是扩展的新行?样本数据和期望的结果真的会有帮助。你想要添加、新列还是扩展的新行?冻糕-谢谢你的建议-效果很好。然后我所需要做的就是对其进行交叉表查询,以获得列中的数据umnar格式,这样Access就可以绘制它。帕菲-谢谢你的建议-效果很好。然后我需要做的就是对它进行交叉表查询,以获取列格式的数据,这样Access就可以绘制它。