[英]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 By
在ROW_NUMBER() Over (Partition By)
我希望這是有道理的,但如果不能,我將作進一步解釋,每個“線索”可能都有一個或多個“引號”。 每個“報價”都會列出許多產品。 這些可以被復制(所以為什么我使用的sum(qty/100)
我需要發生的是所有leadno
要顯示,獨特的cn_ref
和最高數量RN = 1
對leadno
我不確定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.