表ProductMst
(组合是唯一的 - CodeNum,MainCatid,SubCatid)
id CodeNum MainCatid SubCatid Desc Qty
1 001 1 1 prod1 5
2 001 1 2 prod2 10
3 001 2 3 prod3 1
4 002 2 3 prod4 2
5 003 2 3 prod5 3
6 004 1 1 prod6 4
子表SubCatMst
id name subcode
1 scat1 00
2 scat2 00
3 scat3 02
4 scat4 03
期望的结果
id CodeNum MainCatid SubCatid Desc Qty subcode
2 001 1 2 prod2 15 00
3 001 2 3 prod3 1 02
4 002 2 3 prod4 2 02
5 003 2 3 prod5 3 02
6 004 1 1 prod6 4 00
基本上,我想根据subcode
对sum (Qty)
进行分组,subcode
进行分组。并且,根据TOP 1
将MAX(Qty)
记录数据作为所有列。
摘要:请先检查两个结合的记录。
查询尝试:
select * from (
select A.*, B.subcode,
ROW_NUMBER() OVER( PARTITION BY A.CodeNum, A.MainCatid, B.subcode ORDER BY A.Qty desc) as row
from ProductMst A
inner join SubCatMst B on A.SubCatid=B.id
) as A where row<=1
答案 0 :(得分:3)
你的问题是:
我想将子代码分组,如果相同
如果有什么相同的话?我认为这意味着codenum
是相同的。
无论确切的字段如何,逻辑都是相同的。您可以使用窗口函数来聚合数据并确定要选择的行:
select ps.*
from (select p.*, sc.subcode,
sum(qty) over (partition by codenum, subcode) as qty,
row_number() over (partition by codenum, subcode order by qty desc) as seqnum
from ProductMst p join
SubCatMst sc
on p.subcatid = sc.id
) ps
where seqnum = 1;