2013-04-04 3 views
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'. 
+2

Что, что 'Using' должен делать? Насколько я знаю, ключевое слово «Использовать» в TSQL отсутствует. – Jamiec

+0

@ Jamiec sir, если я пытаюсь использовать приведенный выше код, он все еще показывает ошибку. –

+2

Теперь это отличная и простая ошибка. У вас более 1 поля salesperson_id (один раз в таблице «Заказы», ​​один раз в подзапросе «TopOrder»). Выбор не знает, какой из них вы хотите. (PS. Вам не нужно называть меня sir;)) – Jamiec

ответ

0

Я не знаю, если SQL Server поддерживает используя ключевое слово. Единственный db, который я знаю, это redbrick. Вы, возможно, придется изменить

using (saleperson_id) 

в

where toporder.salesperson_id = orders.salesperson_id 
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) 

Этот запрос поможет вам перечислить все названия продажи лица и Одер количество заказа с максимальным количеством Попробуйте это и обратная связь со мной ли это помогает вам или нет

1

У вас есть два salesperson_id в вашем запросе: один в таблице Orders и один в подзапросе TopOrder.

Лучшей практикой всегда является определение имени поля с именем таблицы или псевдонимом.

0

Try:

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 
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 
Смежные вопросы