2012-02-09 68 views
1

我試圖選擇所有佣金數據中的一個將向最高銷售人員支付佣金的發票。 (可以爲每張發票支付多筆佣金。)我只有佣金報告表,其中包含每個發票的每個銷售人員的佣金。簡化包含集合的嵌套子查詢

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 

非常感謝。

斯科特

回答

1

我不明白的要求,這是我在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 
) 
+0

顯然你沒明白的要求,你的釘碼。這正是我想要的。非常感謝。 – Scott 2012-02-09 07:27:23

+0

看起來你改變了關於設置這個答案正確的想法(是的,stackoverflow賣給你:P)。查詢有問題嗎? – 2012-02-10 07:02:23

+1

不,沒有錯。你的代碼工作正常。只是想看看有沒有人在這件事上發表任何言論。我猜不會。我會提到一些SQL編碼人員可能建議將子查詢放入連接而不是where子句中。其實這就是我喜歡的方式 - 也許沒關係。再次感謝您的解決方案。 – Scott 2012-02-15 22:45:39