CREATE TABLE 表1(名称 varchar(10), 数量 int, 使用地点 varchar(10), 类别 varchar(10))
INSERT 表1 select 'A',2,'N1','CATE1'
union all select 'B',1,'N2','CATE1'
union all select 'A',1,'N2','CATE1'create table 表2(名称 varchar(10),库存 int)
insert 表2 SELECT 'A','3'
UNION ALL SELECT 'B','6'
GOselect 表1.名称,总数 = sum(数量) +  sum(库存),
N1所有数量 = sum(case when 使用地点 = 'N1' then 数量 else 0 end),
N2所有数量 = sum(case when 使用地点 = 'N2' then 数量 else 0 end),
库存 = sum(库存)
from 表1 JOIN 表2 on 表1.名称 = 表2.名称
group by 表1.名称
go错误结果:
名称  总数  N1   N2    库存
A  9 2 1 6(错误汇总数据)
B  7 0 1 6
表1 JOIN 表2 后,产生重复元组,使汇总重复,如何写SQL语句?
这是上午一个问题的继续,请帮忙!

解决方案 »

  1.   

    SELECT a.*, SUM(表2.库存) AS 库存
    FROM (SELECT 表1.名称, 总数 = SUM(数量), 
                  N1所有数量 = SUM(CASE WHEN 使用地点 = 'N1' THEN 数量 ELSE 0 END), 
                  N2所有数量 = SUM(CASE WHEN 使用地点 = 'N2' THEN 数量 ELSE 0 END)
            FROM 表1
            GROUP BY 表1.名称) AS a, 表2
    WHERE 表2.名称 = a.名称
    GROUP BY a.名称, 总数, N1所有数量, N2所有数量
      

  2.   

    既然是重复的,你用Max或者Min取一个就可以了,不要用Sum如下select 表1.名称,总数 = sum(数量) +  sum(库存),
    N1所有数量 = sum(case when 使用地点 = 'N1' then 数量 else 0 end),
    N2所有数量 = sum(case when 使用地点 = 'N2' then 数量 else 0 end),
    库存 = max(库存)
    from 表1 JOIN 表2 on 表1.名称 = 表2.名称
    group by 表1.名称
    go
      

  3.   

    select 表1.名称,总数 = sum(数量) +  min(库存),
    N1所有数量 = sum(case when 使用地点 = 'N1' then 数量 else 0 end),
    N2所有数量 = sum(case when 使用地点 = 'N2' then 数量 else 0 end),
    库存 = max(库存)
    from 表1 JOIN 表2 on 表1.名称 = 表2.名称
    group by 表1.名称完成!!谢谢