有两个以上视图,其字段相同,比如,分别为单位编号,数量1,数量2,数量3...
现在想把两个视图的内容合并起来,比如
视图1中有单位编号:001,数量1:4,数量2:3,数量3为空
视图2:单位:001,数量1:3,数量2:为空,数量3:3
      单位:002,数量1:2,数量2:4,数量3:1
合并后的结果包含下面的记录
单位编号,数量1,    数量2,  数量3
001       7(4+3)   3      3
002       1         2      1

解决方案 »

  1.   


    select 单位编号,sum(数量1) as 数量1,sum(数量2) as 数量2,sum(数量3) as 数量3
    from
    (
    select * from view1
    union all
    select * from view2
    )a
    group by 单位编号
      

  2.   

    select a.单位编号,sum(a.数量1) as 数量1,sum(a.数量2) as 数量2,sum(a.数量3) as 数量3
    from
    (
    select 单位编号, 数量1, 数量2, 数量3
     from view1
    union all
    select 单位编号, 数量1, 数量2, 数量3 from view2
    )a
    group by a.单位编号
      

  3.   

    --如果没有重复值
    select isnull(a.单位编号,b.单位编号) as 单位编号,
           isnull(a.数量1)+isnull(b.数量1) as 数量1,
           isnull(a.数量2)+isnull(b.数量2) as 数量2,
           isnull(a.数量3)+isnull(b.数量3) as 数量3
    from
           view1 a full join view2 b
    on a.单位编号=b.单位编号
      

  4.   

    select 单位编号,sum(数量1),sum(数量2),sum(数量3) from 视图1,视图2 where 视图1.单位编号 *= 视图2.单位编号
    group by 单位编号
      

  5.   

    如果是三个视图,是不是同理
    select 单位编号,sum(数量1) as 数量1,sum(数量2) as 数量2,sum(数量3) as 数量3
    from
    (
    select * from view1
    union all
    select * from view2
    union all
    select * from view3
    )
    group by 单位编号
      

  6.   

    用UNION就可以了. 这里用JOIN效率差多了.
      

  7.   

    楼上的朋友,为什么这么肯定Union就比join的效率高?
      

  8.   

    回 LouisXIV(夜游神) 
    有重复值
      

  9.   

    fcuandy(www.iDotNet.org)
    你看我的写法对不对阿
      

  10.   

    你是说三个视图进行UNION那段?结构一样的话,没有问题.
    如果不一样,不用*而用字段列表,将字段一一对应即可.如果 单位编号 有重复值,那可能是因为值确实不一样.比如char的空格,字符编码,全半角等等
      

  11.   

    我今天也碰到这个问题了==================================
    在SQL Server 高手的大海中小心的行走
    ==================================