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