编写一个查询,为每个客户显示他们的客户代码,名称,总计,余额(来自客户表)以及他们的总购买量(来自发票)。此列可以称为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子句中得到了运算符错误。
如果有任何信息似乎缺失或不完整,我已尝试尽可能详细地发布此帖子,请不要犹豫,在评论中给我打电话。
谢谢
答案 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