2016-07-23 40 views
0

我有臺這樣的,每個PRODUCT_ID由點總和空行

------------------------ 
| product_id | price | 
------------------------ 
| 1   |   | 
| 1.2  |   | 
| 1.2.1  | 1  | 
| 1.2.2  | 2  | 
| 1.2.3  | 1  | 
| 1.3  |   | 
| 1.3.1  | 1  | 
| 1.3.2  | 1  | 

我需要計算(和)每個PRODUCT_ID,所以我可以看到的product_id的每頭(產品數量較小的)分離,這裏是我想要的結果

------------------------ 
| product_id | price | 
------------------------ 
| 1   | 6  | 
| 1.2  | 4  | 
| 1.2.1  | 1  | 
| 1.2.2  | 2  | 
| 1.2.3  | 1  | 
| 1.3  | 2  | 
| 1.3.1  | 1  | 
| 1.3.2  | 1  | 

應該用什麼sql語句..?

+1

另外,你嘗試過什麼?你的表的列類型是什麼?根據哪個「規則」來填充價格字段?你真的不*問一個問題*。 –

+1

@GordonLinoff:是不是真的如此?也許你應該仔細閱讀我的回答如下,並在SQL的能力,你的泛泛更加謹慎。 –

回答

2

此SQL:

SELECT parent.product_id, sum(child.price) as price 
FROM Table1 AS parent left join Table1 AS child 
    on child.product_id like parent.product_id & "*" 
group by parent.product_id 

union 

select product_id, price 
from table1 
where price is not null 

order by product_id 
; 

生成用於您的樣本數據reqired輸出。

注意幾件事,是構建SQL查詢有用:

  • 使用UNION的組成兩個不同的結果集的作品。

  • 使用GROUP BY的生成分類彙總。

  • 那JOIN子句中使用LIKE會造成對大數據集的性能問題。這可以通過從詳細產生永久的映射表來減輕PRODUCT_ID值到子總層次結構;本質上,從價格表中刪除小計的product_id行。