簡體   English   中英

SQL Over Partition通過Over Partition By

[英]SQL Over Partition By Over Partition By

我有以下代碼,當我引用一個“ leadno ”時,它可以正常工作,因為它返回單個產品的最高總和

select t.*
from (Select t2.leadno, t1.quoteno, t1.cn_ref, sum(t1.qty/100) as 't_qty',
             ROW_NUMBER() Over (Partition By t1.cn_ref order by sum(qty/100) desc) as RN 
      From dba.quotelne t1 INNER JOIN
           dba.quotehdr t2
           ON t1.quoteno = t2.quoteno
      Where leadno = 31665 and t1.statusflag = 'A' and t2.statusflag = 'A' 
      Group By t2.leadno, t1.quoteno, t1.cn_ref
     ) t
where rn = 1

但是,當我添加更多的是一個leadno返回不返回所有quoteno它只返回最高值sum(qty/100)那么,有沒有一種方式來運行一個ROW_NUMBER() Over (Partition ByROW_NUMBER() Over (Partition By)

我希望這是有道理的,但如果不能,我將作進一步解釋,每個“線索”可能都有一個或多個“引號”。 每個“報價”都會列出許多產品。 這些可以被復制(所以為什么我使用的sum(qty/100)我需要發生的是所有leadno要顯示,獨特的cn_ref和最高數量RN = 1leadno

我不確定100%,但是我認為您需要將Leadno放入“分區”中才能完成所需的操作:

select t.*
    from (Select t2.leadno, t1.quoteno, t1.cn_ref, sum(t1.qty/100) as 't_qty',
         ROW_NUMBER() Over (Partition By t2.leadno, t1.cn_ref order by sum(qty/100) desc) as RN 
      From dba.quotelne t1 INNER JOIN
           dba.quotehdr t2
       ON t1.quoteno = t2.quoteno
      Where leadno = 31665 and t1.statusflag = 'A' and t2.statusflag = 'A' 
      Group By t2.leadno, t1.quoteno, t1.cn_ref
     ) t
where rn = 1

除此之外,您不應該按順序來分配數量,它不會更改順序,因為您將每個值都按100進行分配,但是引擎必須對每個記錄進行分類,然后才能創建摘要

為什么需要使用ROW_NUMBER()OVER(PARTITION BY)?

如果我了解您的需求,則需要以下值:Leadno,cn_ref,max(sum(qty / 100))

因此,請嘗試以下查詢:

Select t2.leadno, t1.cn_ref, max(sum(t1.qty/100)) as 't_qty',
  From dba.quotelne t1 INNER JOIN
       dba.quotehdr t2
       ON t1.quoteno = t2.quoteno
  Where leadno = 31665 and t1.statusflag = 'A' and t2.statusflag = 'A' 
  Group By t2.leadno

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM