【问题标题】:Query to aggregate contract line-item values across contracts查询以汇总合同中的合同行项目值
【发布时间】:2015-05-06 09:32:05
【问题描述】:

我在 Microsoft Access 中有 2 个表:Contract_1 和 Contract Items

Contract_1 的列如下:Contract ID, Contract Value, Date, Committed Prod_ID, 其值示例如下:

1  $100,000  3/5/15 111

Contract Items 有 Prod ID, Product, Unit Price,它们的值示例如下:

111  Light Bulb  $5.00

它们通过一对多关系链接,Prod ID {PK}Contract_1 中的已提交 Prod_ID

当我编写查询以显示产品和总价的摘要时,我得到

Product|             Unit Price|        Quantity|             Total Price|

Light Bulb| $5.00|  2|  $10.00

Light Bulb| $5.00|  3|  $15.00 

在我的数据中,我有 2 个合同,合同 ID 1 和 5,都购买了灯泡。但既然它们是同一个产品,我怎样才能让它们显示为总共 5 而不是 3 和 2? 我尝试使用 GROUP BY,但它不起作用。我当前的查询如下所示:

SELECT [Contract Items].Product, 
[Contract Items].[Unit Price], 
Contract_1.[Actual Qty] AS Quantity, 
[Unit Price]*[Quantity] AS [Total Price]
    FROM [Contract Items] 
    INNER JOIN Contract_1 
ON [Contract Items].[Prod ID]=Contract_1.[Committed Prod_ID]
    GROUP BY  [Contract Items].Product, 
[Contract Items].[Unit Price], 
Contract_1.[Actual Qty], 
[Contract Items].[Quantity];

谢谢!

【问题讨论】:

  • 您需要聚合函数 SUM,例如总和(数量)。 (然后从 GROUP BY 列表中删除 Quantity。)
  • @jarlh 这就是我所做的。但它仍然不起作用 SELECT [Contract Items].Product, [Contract Items].[Unit Price], Contract_1.[Actual Qty] AS Quantity, [Unit Price]*SUM([Quantity]) AS [Total Price] FROM [ Contract Items] INNER JOIN Contract_1 ON [Contract Items].[Prod ID]=Contract_1.[Committed Prod_ID] GROUP BY [Contract Items].Product, [Contract Items].[Unit Price], Contract_1.[Actual Qty];

标签: sql ms-access group-by


【解决方案1】:

试试这个(EDITED),@jarlh 在说什么:

 SELECT [Contract Items].Product, 
 [Contract Items].[Unit Price], 
 SUM(Contract_1.[Actual Qty]) AS Quantity, 
 SUM([Contract Items].[Unit Price]*Contract_1.[Actual Qty]) AS [Total Price]
 FROM [Contract Items] 
 INNER JOIN Contract_1 
 ON [Contract Items].[Prod ID]=Contract_1.[Committed Prod_ID]
 GROUP BY  [Contract Items].Product, 
 [Contract Items].[Unit Price];

【讨论】:

  • 嗯,我得到一个错误说我不能使用子查询,它引用了这一行 >> SUM([Unit Price]*[Quantity]) :/
【解决方案2】:

在这种情况下,首先获取计数,然后进行连接并计算总价,如下所示

SELECT [Contract Items].Product, 
[Contract Items].[Unit Price], 
tab.Quantity, 
[Contract Items].[Unit Price] * tab.[Quantity] AS [Total Price]
FROM [Contract Items] 
INNER JOIN  
(
SELECT Committed Prod_ID,
count(*) as Quantity
FROM Contract_1
GROUP BY Committed Prod_ID
) tab ON [Contract Items].[Prod ID]=tab.[Committed Prod_ID]

【讨论】:

  • 当我使用该查询时,我得到了两个相同的产品,例如:灯泡| $5.00| 2| $10.00 灯泡| $5.00| 3| $15.00
猜你喜欢
  • 1970-01-01
  • 2020-03-07
  • 2023-01-14
  • 2019-01-18
  • 2019-12-04
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多