如何从Access数据库中的另一个表COUNT

时间:2013-10-22 19:03:12

标签: sql ms-access count

编写一个查询,为每个客户显示他们的客户代码,名称,总计,余额(来自客户表)以及他们的总购买量(来自发票)。此列可以称为Total_purchases。

好吧,是的,这是一个实验室问题,但是我花了很多时间试图弄清楚它是如何工作的。

CUSTOMER表在INVOCE(CUS_CODE)中有一个外键。 INVOICE通过INV_NUMBER跟踪,如果客户有多次交易,则可以在该表中列出多次一次。

我尝试了很多我最新的事情:

SELECT CUSTOMER.CUS_CODE, CUSOMTER.CUS_FNAME + " " + CUSTOMER.CUS_LNAME as NAME,
CUSTOMER.CUS_BALANCE 
FROM (SELECT COUNT(*) as total_purchases 
FROM INVOICE WHERE CUSTOMER.CUS_CODE = INVOICE.CUS_CODE);

但是,它要求每个事物的参数值。

以下是表格:

**CUSTOMER**
CUS_CODE
CUS_FNAME
CUS_LNAME
CUS_BALANCE

**INVOICE**
INV_NUMBER
CUS_CODE
INV_DATE

帮助理解如何为另一个表选择一些东西并计算它会非常有帮助。我尝试了两个SELECT,但后来我在FROM子句中得到了运算符错误。

如果有任何信息似乎缺失或不完整,我已尝试尽可能详细地发布此帖子,请不要犹豫,在评论中给我打电话。

谢谢

2 个答案:

答案 0 :(得分:3)

您可以采取几种方法

只需加入两个表并在发票表上计算一个

SELECT 
      CUSTOMER.CUS_CODE, 
      CUSOMTER.CUS_FNAME + " " + CUSTOMER.CUS_LNAME as NAME,
      CUSTOMER.CUS_BALANCE ,
      COUNT (INVOICE.CUS_CODE)

FROM CUSTOMER 
     INNER JOIN INVOICE 
     ON CUSTOMER.CUS_CODE = INVOICE.CUS_CODE

GROUP BY 
      CUSTOMER.CUS_CODE, 
      CUSOMTER.CUS_FNAME + " " + CUSTOMER.CUS_LNAME,
      CUSTOMER.CUS_BALANCE 

如果您不想在客户字段上执行分组操作,另一种方法是在from子句中创建内联视图并加入到该

SELECT 
          CUSTOMER.CUS_CODE, 
          CUSOMTER.CUS_FNAME + " " + CUSTOMER.CUS_LNAME as NAME,
          CUSTOMER.CUS_BALANCE ,
          purchasecount.total_purchases 
FROM  
          CUSTOMER 
          INNER JOIN (SELECT COUNT(*) as total_purchases , INVOICE.CUS_CODE)
                      FROM INVOICE 
                      GROUP BY INVOICE.CUS_CODE)) purchasecount
          ON CUSTOMER.CUS_CODE = purchasecount.CUS_CODE ;

另一种选择是创建一个查询,然后在from。中使用它。

另一个选项Jack's answer在select中使用内联视图。

答案 1 :(得分:2)

SELECT CUSTOMER.CUS_CODE, CUSOMTER.CUS_FNAME + " " + CUSTOMER.CUS_LNAME as NAME,
CUSTOMER.CUS_BALANCE, 
(
  SELECT COUNT(INVOICE.CUS_CODE) 
  FROM INVOICE 
  WHERE (CUSTOMER.CUS_CODE = INVOICE.CUS_CODE)
) AS Total_purchases
FROM CUSTOMER

这使用所谓的子查询。在子查询注释WHERE中的CUSTOMER.CUS_CODE = INVOICE.CUS_CODE子句中。

这是发票表映射到customers表的位置。因此,子查询使用外部查询CUSTOMER.CUS_CODE