Я пытаюсь выбрать все данные комиссии для одного из счетов-фактур, которые будут платить комиссионные за наибольшее количество продавцов. (Для каждого счета-фактуры могут быть оплачены несколько комиссионных.) У меня есть только таблица CommissionReport, в которой указаны комиссионные для каждого продавца по каждому счету.Упростить вложенные подзапросы, содержащие агрегаты
invoice_number salesperson_id commission_amt
---------------- ---------------- ----------------
1001 Bob 30.00
1002 Alison 64.50
1002 Charlie 110.25
Этот код работает отлично, но мой subconcious кричит, что мне не нужно, чтобы гнездо подзапросы три глубокие. Может кто-то, пожалуйста, выпрями меня?
select
invoice_number,
salespeson_id,
commission_amt
from
CommissionReport CR
join
( select top 1 invoice_number
from CommissionReport CR2
group by CR2.invoice_number
having count(*) =
( select max(CR3.cnt)
from
( select invoice_number,
cnt = count(*)
from CommissionReport CR4
group by invoice_number
) CR3
)
) CR2 on CR2.invoice_number = CR.invoice_number
Большое спасибо за внимание.
Скотт
Видимо вы СДЕЛАЛИ понять требование, и вы прибили код. Это делает именно то, что я хотел. Огромное спасибо. – Scott
Похоже, вы передумали, установив этот ответ правильно (да, stackoverflow продал вас: P). Было ли что-то не так с запросом? –
Нет, ничего страшного. Ваш код работает нормально. Просто хотел посмотреть, есть ли у кого-нибудь еще что-нибудь по этому поводу. Наверное, нет. Я хотел бы упомянуть, что некоторые SQL-кодеры, возможно, предложили помещать подзадачу в соединение, а не в предложение where. На самом деле так я предпочитаю - может быть, это не имеет значения. Еще раз спасибо за ваше решение. – Scott