SQL Full Join 的 Where条件

SQL需求是损益视图串资产负债视图

用Excel透视表模拟出来的结果就是

用SQL查询如下:

当Where条件是左边的视图的时候

select 
        损益视图.年
        ,损益视图.年月
        ,损益视图.期间
        ,损益视图.账簿名称
        ,损益视图.组织编码
        ,损益视图.组织名称    
        ,损益视图.项目名称 损益项目
        ,损益视图.本期发生数 损益本期
        ,资产负债视图.项目名称 资产项目
        ,资产负债视图.年初数 资产年初
        ,资产负债视图.期末数 资产期末
 
                    from 损益视图
                            full join 资产负债视图
                                on 损益视图.年月 = 资产负债视图.年月
                                    and 损益视图.年 =资产负债视图.年
                                    and 损益视图.期间 = 资产负债视图.期间
                                    and 损益视图.账簿名称 = 资产负债视图.账簿名称
                                    and 损益视图.组织编码 = 资产负债视图.组织编码
                    where 损益视图.账簿名称 ='蓝海电子公司主账簿'

当Where条件是右边视图的时候

    select 
        损益视图.年
        ,损益视图.年月
        ,损益视图.期间
        ,损益视图.账簿名称
        ,损益视图.组织编码
        ,损益视图.组织名称    
        ,损益视图.项目名称 损益项目
        ,损益视图.本期发生数 损益本期
        ,资产负债视图.项目名称 资产项目
        ,资产负债视图.年初数 资产年初
        ,资产负债视图.期末数 资产期末
 
                    from 损益视图
                            full join 资产负债视图
                                on 损益视图.年月 = 资产负债视图.年月
                                    and 损益视图.年 =资产负债视图.年
                                    and 损益视图.期间 = 资产负债视图.期间
                                    and 损益视图.账簿名称 = 资产负债视图.账簿名称
                                    and 损益视图.组织编码 = 资产负债视图.组织编码
                    --where 损益视图.账簿名称 ='蓝海电子公司主账簿'
                    where 资产负债视图.账簿名称 ='蓝海电子公司主账簿'

 所以要慎重选择Where条件,同时如果这个数据集被CBoard调用的时候,那还要注意这些

项目了,因为Cboard会包一层视图,这时候项目就可以变成条件了,条件就决定了重复方向。

select * 
from (
        
    select 
        损益视图.年
        ,损益视图.年月
        ,损益视图.期间
        ,损益视图.账簿名称
        ,损益视图.组织编码
        ,损益视图.组织名称    
        ,损益视图.项目名称 损益项目
        ,损益视图.本期发生数 损益本期
        ,资产负债视图.项目名称 资产项目
        ,资产负债视图.年初数 资产年初
        ,资产负债视图.期末数 资产期末
 
                    from 损益视图
                            full join 资产负债视图
                                on 损益视图.年月 = 资产负债视图.年月
                                    and 损益视图.年 =资产负债视图.年
                                    and 损益视图.期间 = 资产负债视图.期间
                                    and 损益视图.账簿名称 = 资产负债视图.账簿名称
                                    and 损益视图.组织编码 = 资产负债视图.组织编码
) v_cview 

                    --where 损益视图.账簿名称 ='蓝海电子公司主账簿'
                    where 账簿名称 ='蓝海电子公司主账簿'
原文地址:https://www.cnblogs.com/Bruce_H21/p/10577478.html