空行中的总和

时间:2016-07-23 12:32:03

标签: sql ms-access

我的表格是这样的,每个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号的较小者),这是我想要的结果

------------------------  
| 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 个答案:

答案 0 :(得分: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
;

为您的样本数据生成所需的输出。

注意一些在构建SQL查询时有用的东西:

  • 使用UNION组合结果集的两个独立部分。

  • 使用GROUP BY生成小计。

  • 在JOIN子句中使用LIKE会导致大型数据集出现性能问题。这可以通过从详细的 product_id 值到子总体层次结构创建永久映射表来缓解;实质上,从价格表中删除小计的product_id行。