0

我需要编写一个查询来显示客户代码、客户名字、姓氏、完整地址、发票日期和阿拉巴马州每个客户(包括阿拉巴马州从未购买过的任何客户)进行的最大购买的发票总额; 他们的发票日期应为 NULL,发票总额应显示为 0)。

这是两个必需表的 ERD。

这是我最新的查询的样子。

select distinct lgcustomer.cust_code
      ,Cust_FName
      ,Cust_LName
      ,Cust_Street
      ,Cust_City
      ,Cust_State
      ,Cust_ZIP
      ,max(inv_total) as [Largest Invoice]
      ,inv_date
from lgcustomer left join lginvoice on lgcustomer.cust_code = lginvoice.cust_code
where Cust_State = 'AL'
group by lgcustomer.cust_code
      ,Cust_FName
      ,Cust_Lname
      ,Cust_Street
      ,Cust_City
      ,Cust_State
      ,Cust_ZIP
      ,Inv_Date

我不明白为什么,尽管使用了 DISTINCT lgcustomer.cust_code 以及仅 MAX(inv_total),它仍然返回该客户的每个 inv_total。

我的教授说要使用 UNION,但据我了解,这是为了编译两个具有相同属性的不同表......

我感谢任何可以为我指明正确方向的回复!

解决方案

我们在课堂上得到的答案是使用相关子查询和联合。

select c.cust_code
      ,cust_fname
      ,cust_lname
      ,cust_street
      ,cust_city
      ,cust_state
      ,inv_date
      ,inv_total
from lgcustomer c left outer join lginvoice i on c.cust_code = i.cust_code
where cust_state = 'AL'
and inv_total = (select max(inv_total)
                 from lginvoice i2
                 where i2.cust_code = c.cust_code)

union
select c.cust_code
      ,cust_fname
      ,cust_lname
      ,cust_street
      ,cust_city
      ,cust_state
      ,''
      ,0

from lgcustomer c left outer join lginvoice i on c.cust_code = i.cust_code
where cust_state = 'AL'
and inv_date is null
and inv_total is null
order by cust_lname asc
4

0 回答 0