复杂查询语句的完成-半夜罗
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-查询/SQL语句


复杂查询语句的完成

发表时间:2015/5/17 21:56:54 评论(1) 浏览(10299)  评论 | 加入收藏 | 复制
   
摘 要:怎样完成复杂sql语句
正 文:
“  TRANSFORM Sum(g.工资) AS 工资
Select g.年 AS 年, g.月 AS 月, g.日 AS 日, Sum(g.工资) AS 总计
FROM (Select e.年, e.月, e.日, e.姓名, Sum(e.工资) AS 工资 FROM (Select a.年, a.月, a.日, a.姓名, [b]![工资]*[a]![考勤] AS 工资 FROM 整形考勤表 AS a INNER JOIN (Select c.年, c.月, c.日, IIf([a]![考勤]=Null,Null,[c]![整形]/[a]![考勤]) AS 工资 FROM (Select 年, 月, 日, Sum(a.考勤) AS 考勤 FROM 整形考勤表 AS a GROUP BY 年, 月, 日)  AS a INNER JOIN 工段工资表 AS c ON (a.日 = c.日) AND (a.月 = c.月) AND (a.年 = c.年))  AS b ON (a.日 = b.日) AND (a.月 = b.月) AND (a.年 = b.年))  AS e GROUP BY e.年, e.月, e.日, e.姓名)  AS g
GROUP BY g.年, g.月, g.日
orDER BY g.年, g.月, g.日
PIVOT g.姓名;  ”


你看到这样的sql语句,能一下清楚是什么意思吗?你能一次性写出这样的语句吗?
如果改成这样的呢?


TRANSFORM Sum(g.工资) AS 工资

Select g.年, g.月, g.日, Sum(g.工资) AS 总计

FROM (

Select e.年, e.月, e.日, e.姓名, Sum(e.工资) AS 工资

FROM (

Select a.年, a.月, a.日, a.姓名, [b]![工资]*[a]![考勤] AS 工资

FROM

整形考勤表 AS a INNER JOIN (

Select c.年, c.月, c.日, IIf([a]![考勤]=Null,Null,[c]![整形]/[a]![考勤]) AS 工资

 FROM (

Select 年, 月, 日, Sum(a.考勤) AS 考勤

FROM 整形考勤表 AS a GROUP BY 年, 月, 日

)  AS a

 INNER JOIN 工段工资表 AS c ON (a.日 = c.日) AND (a.月 = c.月) AND (a.年 = c.年)

)  AS b ON (a.日 = b.日) AND (a.月 = b.月) AND (a.年 = b.年)

)  AS e GROUP BY e.年, e.月, e.日, e.姓名

)  AS g

GROUP BY g.年, g.月, g.日

orDER BY g.年, g.月, g.日

PIVOT g.姓名;


附   件:

点击下载此附件


那么双怎样理解呢?不妨按第二种写法中首先按中间的红色部分开始,按两头颜色相同部分全部复制到示例中查询,会得到想要的最终结果【整形工资表】。
通过这个示例,反过来说,复杂的查询,能不能一步一步的进行,最后一个一个的替换呢?完全可以。本例中就用了5步完成。完成后将前面的全部删除,只保留最终结果的一个即可。本例中将查询1-查询4完全删除只保留【查询5】,可以看到【整形工资表】的结果与【查询5】的结果是完全一样的。

Access软件网交流QQ群(群号:198465573)
 
 相关文章
写了一个好复杂的SQL查询语句  【jimcloudy  2007/11/24】
[access报表]access如何制作复杂报表  【umvsoft整理  2008/7/23】
进度条不必太复杂  【马喜立  2011/11/25】
异曲同工——使用代码解决复杂查询,查询日期补空行  【在水一方  2013/4/1】
分步法实现复杂查询(基本不用SQL语句)  【半夜罗  2014/6/24】
常见问答
技术分类
相关资源
文章搜索
关于作者

半夜罗

文章分类

文章存档

友情链接