使用 Access 查询设计器轻松构造复杂 SQL 语句

Office 家族中,平时使用 MS Acess 的人非常少,如果从工作效率的角度来说,掌握了 Access,很多时候岂止是事半功倍啊!下面就介绍一种基于 Access 查询轻松构造 SQL 语句的方法。因为本文面向把 MS Office 作为办公工具的用户,熟练编写 SQL 语句的请忽略。

假设我们有如下的员工工时记录表:

目标是按固定月份 (1~12 月)的格式统计员工的工时,格式如下:

创建查询的方法如下:

在【创建】选项卡中,点击 “查询设计” 按钮,新建一个查询,添加 WorkingHours 表:

因为需要按月统计,需要提取日期的月份,并且每个月作为单独的一列,使用表达式生成器来设置元月数据列为:

Access 不支持 case when,所以使用 IIF 函数,IIF函数比 case when 更加简洁。用同样的方法,为每个月份分别设置一列,此时的查询设计界面如下:

切换到 SQL 视图,对应的 SQL 语句如下:

SELECT
    WorkingHours.EmployeeID,
    IIf(Month([WorkDate]) = 1, [WorkHours], 0) AS Jan,
    IIf(Month([WorkDate]) = 2, [WorkHours], 0) AS Feb,
    IIf(Month([WorkDate]) = 3, [WorkHours], 0) AS Mar,
    IIf(Month([WorkDate]) = 4, [WorkHours], 0) AS Apr,
    IIf(Month([WorkDate]) = 5, [WorkHours], 0) AS May,
    IIf(Month([WorkDate]) = 6, [WorkHours], 0) AS Jun
FROM
    WorkingHours
WHERE
    (((Year([WorkDate])) = 2018));

将查询保存为 v1。基于刚才创建的查询 v1,新建一个查询:

选取 V1 的所有字段:

在【设计】选项卡中,点击 “汇总” 按钮,此时在表下面增加了一行:总计,界面变为:

因为我们需要统计各个月份的工时,所以将除了 EmployeeID 字段之外的其他字段更改为 "合计",同时保持列名不变。

对应的 SQL 语句如下:

SELECT
    V1.EmployeeID,
    Sum(V1.Jan) AS Jan,
    Sum(V1.Feb) AS Feb,
    Sum(V1.Mar) AS Mar,
    Sum(V1.Apr) AS Apr,
    Sum(V1.May) AS May,
    Sum(V1.Jun) AS Jun
FROM
    V1
GROUP BY
    V1.EmployeeID;

基于查询的查询其实是一个子查询,我们在 from V1 前加上 () as, sql 语句变为下面的样子:

SELECT
    V1.EmployeeID,
    Sum(V1.Jan) AS Jan,
    Sum(V1.Feb) AS Feb,
    Sum(V1.Mar) AS Mar,
    Sum(V1.Apr) AS Apr,
    Sum(V1.May) AS May,
    Sum(V1.Jun) AS Jun
FROM
    () as V1
GROUP BY
    V1.EmployeeID;

然后把刚才查询 v1 的 sql 语句放在括号中:

SELECT
    V1.EmployeeID,
    Sum(V1.Jan) AS Jan,
    Sum(V1.Feb) AS Feb,
    Sum(V1.Mar) AS Mar,
    Sum(V1.Apr) AS Apr,
    Sum(V1.May) AS May,
    Sum(V1.Jun) AS Jun
FROM
    (
        SELECT
            WorkingHours.EmployeeID,
            IIf(Month([WorkDate]) = 1, [WorkHours], 0) AS Jan,
            IIf(Month([WorkDate]) = 2, [WorkHours], 0) AS Feb,
            IIf(Month([WorkDate]) = 3, [WorkHours], 0) AS Mar,
            IIf(Month([WorkDate]) = 4, [WorkHours], 0) AS Apr,
            IIf(Month([WorkDate]) = 5, [WorkHours], 0) AS May,
            IIf(Month([WorkDate]) = 6, [WorkHours], 0) AS Jun
        FROM
            WorkingHours
        WHERE
            (((Year([WorkDate])) = 2018))
    ) as V1
GROUP BY
    V1.EmployeeID;

这样就实现了一个完整的查询,比手工编写方便太多了。如果有更多层的子查询,都可以用同样的方法来实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342