2017-03-03 56 views
2

ProductMst(組合是唯一的 - CodeNum,MainCatid,SubCatid)SQL頂部1記錄

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)的所有列。

摘要:請檢查結合的第2條記錄。

查詢嘗試:

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 
+1

向我們顯示您當前的查詢嘗試。 – jarlh

+0

@jarlh編輯我的代碼。 –

回答

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; 
+0

我也嘗試過類似於你的解決方案,只是在尋找'sum(qty)'。 –