JLxiangwei 发表于 2014-5-26 09:42

数据透视表中级班练习七

本帖最后由 JLxiangwei 于 2014-9-16 14:59 编辑

lasharks 发表于 2014-5-27 22:33

左连接到死。。。。有空再想其他办法select 单位名称,服务人员,分类,贷方余额,贷方余额-iif(isnull(上日),0,上日) as 较上日,贷方余额-iif(isnull(上月),0,上月) as 较上月,贷方余额-iif(isnull(上年),0,上年) as 较上年 from (select t7.*,t8.上年 from (select t5.*,t6.上月 from (select t3.*,t4.上日 from (select t1.* ,iif(isnull(t2.贷方余额),0,t2.贷方余额) as 贷方余额 from (select c.*,d.服务人员 from (select a.单位名称,b.分类 from (select 单位名称,项目号 from[库$] group by 单位名称,项目号 having sum(贷方余额)>0)a left join [表2$]b on a.项目号=b.项目号)c left join [表1$]d on c.单位名称=d.单位名称)t1 left join (select 单位名称,sum(贷方余额) as 贷方余额 from [库$] where 日期=#2014/4/25# group by 单位名称)t2 on t1.单位名称=t2.单位名称)t3 left join (select 单位名称,sum(贷方余额) as 上日 from [库$] where 日期=#2014/4/24# group by 单位名称)t4 on t3.单位名称=t4.单位名称)t5 left join (select 单位名称,sum(贷方余额) as 上月 from [库$] where 日期=#2014/3/31# group by 单位名称)t6 on t5.单位名称=t6.单位名称)t7 left join (select 单位名称,sum(贷方余额) as 上年 from [库$] where 日期=#2013/12/31# group by 单位名称)t8 on t7.单位名称=t8.单位名称)

天空的雨 发表于 2014-5-28 17:11

本帖最后由 天空的雨 于 2014-6-1 16:17 编辑

答:
select 单位名称,服务人员,分类,sum(贷方余额) as 货方余额,sum(较上日) as 较上日,sum(较上月) as 较上月,sum(较去年) as 较去年
from(select a.单位名称,服务人员,分类,h.贷方余额,((0 & h.贷方余额)-(0 & b.贷方余额)) as 较上日,((0 & h.贷方余额)-(0 & c.贷方余额)) as 较上月,((0 & h.贷方余额)-(0 & d.贷方余额)) as 较去年
from (((((
    (select DISTINCT 单位名称,编号,网号,项目号,账号 from[库$])a
    left join (select 单位名称,账号,编号,网号,贷方余额 from[库$]where 日期=#2014-4-25#)h
                   on a.单位名称= h.单位名称 and a.账号 = h.账号 and a.编号= h.编号 and a.网号= h.网号)
   left join (select 单位名称,账号,编号,网号,贷方余额 from[库$]where 日期=#2014-4-24#)b
                  on a.单位名称= b.单位名称 and a.账号 =b.账号 and a.账号 = b.账号 and a.编号= b.编号 and a.网号= b.网号)
   left join (select 单位名称,账号,网号,编号,贷方余额 from[库$]where 日期=#2014-3-31#)c
               on a.单位名称= c.单位名称 and a.账号 =c.账号 and a.网号 = c.网号 and a.编号= c.编号)
   left join (select 单位名称,账号,网号,编号,贷方余额 from[库$]where 日期=#2013-12-31#)d
                on a.单位名称= d.单位名称 and a.账号 =d.账号and a.编号= d.编号 and a.网号= d.网号)
left join (select 单位名称,服务人员 from[表1$])f
               on a.单位名称=f.单位名称)
   left join (select 项目号,分类 from[表2$])g
            on a.项目号= g.项目号)
where (贷方余额<>0) or (较上日<>0)or (较上月<>0)or (较去年<>0)
group by 单位名称,服务人员,分类

思路:通过去重得到表a与各所需日期的分表左连接,然后分组求和。这里有用到0连接空字符,否则会有的不计算。



箫风 发表于 2014-5-29 16:43

**** Hidden Message *****

午夜洗衣机 发表于 2014-6-24 17:34


交作业来了

个人感觉这里有两个陷阱:
1.表[库$]必须left join [表1$],否则显示不出有单位名称但是没有服务人员的数据
2.同一个单位4个时间点贷方余额之和为零的要剔除,否则就有500多行数据...select a.单位名称,b.分类,c.服务人员,
sum(iif(日期=#2014-4-25#,a.贷方余额,)) as 贷方余额,
(sum(iif(日期=#2014-4-25#,a.贷方余额,))-sum(iif(日期=#2014-4-24#,a.贷方余额,))) as 较上日,
(sum(iif(日期=#2014-4-25#,a.贷方余额,))-sum(iif(日期=#2014-3-31#,a.贷方余额,))) as 较上月,
(sum(iif(日期=#2014-4-25#,a.贷方余额,))-sum(iif(日期=#2013-12-31#,a.贷方余额,))) as 较上年
from [表2$] b,(select * from [库$] a left join [表1$] c on a.单位名称=c.单位名称)
where a.项目号=b.项目号
group by a.单位名称,b.分类,c.服务人员
having sum(a.贷方余额)>0

zx_wl 发表于 2014-7-15 15:26

SELECT DISTINCT T6.单位名称,服务人员,分类,T6.贷方余额,较上日,较上月,较上年 FROM((((SELECT T1.单位名称,贷方余额,贷方余额-IIF(上日<>0,上日,0) AS 较上日,贷方余额-IIF(上月<>0,上月,0) AS 较上月,贷方余额-IIF(上年<>0,上年,0) AS 较上年 FROM(SELECT T1.单位名称,T2.期末余额 AS 贷方余额,上日,上月,上年 FROM(((((select 单位名称 from [库$] where 贷方余额>0 group by 单位名称)T1 LEFT JOIN (SELECT 单位名称,日期,IIF(SUM(贷方余额)<>0,SUM(贷方余额),0) AS 期末余额 FROM [库$] WHERE 日期=#2014-4-25#GROUP BY 单位名称,日期)T2 ON T1.单位名称=T2.单位名称) LEFT JOIN (SELECT 单位名称,日期,SUM(贷方余额) AS 上日 FROM [库$] WHERE 日期=#2014-4-24#GROUP BY 单位名称,日期)T3 ON T1.单位名称=T3.单位名称) LEFT JOIN (SELECT 单位名称,日期,SUM(贷方余额) AS 上月 FROM [库$] WHERE 日期=#2014-3-31#GROUP BY 单位名称,日期)T4 ON T1.单位名称=T4.单位名称)LEFT JOIN (SELECT 单位名称,日期,SUM(贷方余额) AS 上年 FROM [库$] WHERE 日期=#2013-12-31#GROUP BY 单位名称,日期)T5 ON T1.单位名称=T5.单位名称)))T6 LEFT JOIN [库$]T7 ON T6.单位名称=T7.单位名称) LEFT JOIN [表2$]T8 ON T7.项目号=T8.项目号) LEFT JOIN [表1$]T9 ON T6.单位名称=T9.单位名称)

xiaoni 发表于 2014-9-16 19:43

1111111111111111

索性乱来 发表于 2015-3-9 12:05

挺有意思的啊               

diytok 发表于 2017-3-29 10:56

:(^:D:lol:handshake

jh_richey 发表于 2020-1-20 15:54

都是高手,学习了
页: [1]
查看完整版本: 数据透视表中级班练习七