0

我有3张桌子:

Salesperson
1)ID
2)Name
3)Age
4)Salary

Customer
1)ID
2)Name
3)City
4)IndustryType

Orders
1)Number
2)Order_date
3)cust_id
4)salesperson_id
5)Amount

这就是问题所在:找到每个销售人员的最大订单金额和相关的订单号,以及该订单所属的客户。

在实施此

Select salesperson_id,Numbers As ordernum,Amount
from dbo.Orders As Ord  Inner Join 
(
Select salesperson_id,Max(Amount) as MaxOrder
from dbo.Orders
group by salesperson_id
) as TopOrder
on TopOrder.salesperson_id = Ord.salesperson_id 
where TopOrder.MaxOrder=Ord.Amount

但它显示一个错误:

Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'salesperson_id'.
4

5 回答 5

1

您的查询中有两个salesperson_id,一个在Orders 表中,一个在子查询TopOrder 中。

最佳实践始终是使用表名或别名来限定字段名。

于 2013-04-04T10:04:23.537 回答
0
select sp.Name, od.Numbers, Max(od.Amount)
from SalesPerson as sp left join Orders as od  on sp.ID = od.salesperson_id
Group By sp.ID
having od.Amount = Max(od.Amount)

此查询将帮助您列出最大金额订单的所有销售人员姓名和订单号试试这个并反馈我是否对您有帮助

于 2013-04-04T10:00:47.200 回答
0

我不知道 sql server 是否支持 using 关键字。我知道的唯一数据库是红砖。你可能需要改变

using (saleperson_id)

where toporder.salesperson_id = orders.salesperson_id
于 2013-04-04T09:56:35.883 回答
0

尝试:

Select Ord.salesperson_id,Numbers As ordernum,Amount
from dbo.Orders As Ord  Inner Join 
(
Select salesperson_id,Max(Amount) as MaxOrder
from dbo.Orders
group by salesperson_id
) as TopOrder
on TopOrder.salesperson_id = Ord.salesperson_id 
where TopOrder.MaxOrder=Ord.Amount
于 2013-04-04T18:09:16.777 回答
0
select p_orders.salesperson_id,number as 'OrderNum',amount from p_orders
INNER JOIN
(
select salesperson_id,MAX(amount) as 'MAXORDER' from p_orders group by salesperson_id 
) as TopOrderAmountPerPerson
ON TopOrderAmountPerPerson.salesperson_id=p_orders.salesperson_id 
and p_orders.amount=TopOrderAmountPerPerson.maxorder
于 2017-05-09T05:01:05.530 回答