Упростить вложенные вложенные элементы, содержащие агрегаты - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь выбрать все данные о комиссионных для одного из счетов, которые будут выплачивать комиссионные наибольшему количеству продавцов.(Множественные комиссии могут быть заплачены за каждый счет.) У меня есть только таблица CommissionReport, которая содержит комиссии для каждого продавца по каждому счету.

invoice_number     salesperson_id    commission_amt
----------------   ----------------  ----------------
            1001   Bob                          30.00
            1002   Alison                       64.50
            1002   Charlie                     110.25

Этот код работает нормально, но мое подсознание кричит, что яне нужно вложить подвыборки три глубоких.Может кто-нибудь, пожалуйста, поправьте меня?

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

Большое спасибо заранее.

Скотт

1 Ответ

1 голос
/ 09 февраля 2012

Я не понял требований, и это мой первый запрос в Mssql ... но проверьте, работает ли он:

select cr.invoice_number, cr.salesperson_id, cr.commission_amt  
from CommissionReport CR
where cr.invoice_number in (
    select top 1 invoice_number
    from CommissionReport CR2
    group by CR2.invoice_number
    order by count(*) desc
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...