“ 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】的结果是完全一样的。