SQL连接,总和

时间:2009-06-24 20:59:42

标签: sql

我有3张桌子

  1. bl_main包含两列bl_id和bl_area
  2. bl_id在这里是唯一的。

    1. bl_details包含两列bl_id,名称
    2. bl_id再次是单身。

      1. bl_data包含4列bl_id,month,paper_tons,bottles_tons
      2. bl_id在这里不是唯一的。将有多行相同的bu_id。

        我正在尝试以下列方式检索数据

        bl_id |名字| bl_area | sum(paper_tons)| sum(bottles_tons)| paper_tons | bottles_tons

        sum(paper_tons)应该返回相同bu_id的所有纸张吨的总和,例如1月到12月。

        即使bl_data中没有相应的bu_id,也必须检索bl_main中的所有bu_id。在这种情况下,总和应显示为0.

        我之前没有写过复杂的sql查询,请帮帮我!

        提前致谢!

2 个答案:

答案 0 :(得分:2)

我猜你有MS SQL Server。 试试这个(尚未测试)。

SELECT 
    bl_main.bl_id, 
    bl_main.bl_area,
    bl_id.[name], 
    sum(bl_data.paper_tons) OVER (PARTITION BY bl_main.bl_id),  
    sum (bl_data.bottles_tons) OVER (PARTITION BY bl_main.bl_id), 
    paper_tons , 
    bottles_tons
FROM  bl_main 
    Right join bl_id on bl_main.bl_id = bl_id.bl_id
    right join bl_data on bl_main.bl_id = bl_data.bl_id

答案 1 :(得分:0)

未经测试但我认为应该这样做(对于MS SQL Server)
编辑最长月份

SELECT 

    bl_main.bl_id,
    name,
    bl_area,
    sums.SummedPaper, 
    sums.SummedBottles,
    paper_tons,
    bottles_tons
FROM 
    bl_main

JOIN bl_details ON 
    bl_main.bl_id= bl_details.bl_id
JOIN bl_data ON
    bl_data.bl_id= bl_main.bl_id
JOIN (
    SELECT bl_id, 
        SUM(Paper_tons) As SummedPaper, 
    SUM(bottle_tons) As SummedBottles 
FROM
    bl_data
    WHERE Month = (SELECT MAX(Month) FROM bl_data) 
GROUP by bl_id) sums ON 
    sums.bl_id = bl_main.bl_id