2017-07-26 56 views
0

我有一個蜂房表,如下面5列蜂房/ SQL捆綁爲幾列的列,這些列的其餘的拉基於最低/最高其它列的

name orderno productcategory amount description 
KJFSFKS 1 1 40 D1 
KJFSFKS 2 2 50 D2 
KJFSFKS 3 2 67 D3 
KJFSFKS 4 2 10 D4 
KJFSFKS 5 3 2 D5 
KJFSFKS 6 3 5 D6 
KJFSFKS 7 3 6 D7 
KJFSFKS 8 4 8 D8 
KJFSFKS 9 5 8 D9 
KJFSFKS 10 5 10 D10 
基於同一產品類別代碼

期望的輸出如果產品分類代碼是跨多個行相同添加量字段,挑描述基於最高orderno,orderno總是picklowest,輸出如下

name orderno productcategory amount description 
KJFSFKS 1 1 40 D1 
KJFSFKS 2 2 127 D4 
KJFSFKS 5 3 13 D7 
KJFSFKS 8 4 8 D8 
KJFSFKS 9 5 18 D10 

正如上面所說的,一些字段是在一些順序,以不同的順序的其他

我使用GROUP BY但總和(金額)是好的,大概描述字段是什麼,它是基於orderno列,也有在我的要求等欄目,其中我應該選擇基於訂單號

回答

0
select name, orderno, productcategory, amount, description 
from 
(
select name, orderno, productcategory, 
     sum(amount) over(partition by name, productcategory) amount, 
     first_value(description) over(partition by name, productcategory order by orderno desc) description, 
     row_number() over (partition by name, productcategory order by orderno) rn 
from your_table 
)s where rn=1; --pick lowest orderno 

OK 
KJFSFKS 1  1  40  D1 
KJFSFKS 2  2  127  D4 
KJFSFKS 5  3  13  D7 
KJFSFKS 8  4  8  D8 
KJFSFKS 9  5  18  D10 
Time taken: 12.492 seconds, Fetched: 5 row(s) 
+0

感謝您的回答 –

+0

這是一個不好回答。方式太複雜了,應該是。 –

0
select  name 
      ,min(orderno) as orderno 
      ,productcategory 
      ,sum(amount)  as amount 
      ,max(named_struct('orderno',orderno,'description',description)).description 

from  mytable 

group by name 
      ,productcategory 
;