1

编写一个查询,为每个客户显示他们的客户代码、姓名、总数、余额(来自客户表)和他们的总购买量(来自发票)。此列可以称为 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 子句中出现操作符错误。

如果任何信息似乎丢失或不完整,我已尝试使这篇文章尽可能详细,请不要犹豫,在评论中给我打电话。

谢谢你

4

2 回答 2

3
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

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

于 2013-10-22T19:09:06.523 回答
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 中使用它。

另一个选项是杰克的答案在选择中使用内联视图。

于 2013-10-22T19:13:52.667 回答