ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 36720|回复: 79

[分享] 数据透视表“多表查询”不懂SQL查询语句怎么办?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-8-19 13:02 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:SQL应用
     多表查询不懂SQL查询语句怎么办?首先,我要告诉大家的是办法总是有的,而且也不难。在我们安装office时,我们需要安装Access这个软件,这就是数据库,对大多数朋友来讲并不陌生。
     多表查询也叫联接查询,它是对两个表或两个以上的表,通过字段联接条件使用SQL的查询语句自动连接起来的查询办法。
     该条件一般放在where语句之中,其格式:
            select <目标字段>  from <表名1>,<表名2>
                            where <表名1>.<字段名1>=<表名2>.<字段名2>
      联接条件中的联接字段(这里的字段名就是excel里的列标)一般是两个表中的公共字段或语义相同的字段。现在就拿昨天的一个示例来演示讲解,看看我们是如何获取SQL的查询语句的。
这是楼主的原帖的联接地 表.png 址,我先个大家一个图片。
         这张图片我标示为《表1》和《表2》,《表1》有姓名和性别两个字段,《表2》也有姓名和年龄两个字段,现在需要将两张表合并为一张表并显示姓名、性别和年龄。不懂SQL就无法直接汇总为一张数据透视表。那我们怎么办呢,当然是使用ACCESS做了,并且要获得SQL查询语句。方法如下:
       步骤1.在桌面点击鼠标右键,选择【新建】按钮下的Microsoft Access数据库;
      步骤2.双击打开Microsoft Access数据库,选择【外部数据】功能里的【导入Excel电子表格】,这样就会出来下图;

       步骤3. 图1.png 在【 选择数据源和目标】里,   点击【浏览】,选择Excel表所得的文件地址,其他不变,然后【确定】;
       步骤4.【导入数据表向导】里选择【显示工作表】的【表1】,点击【下一步】;
图二.png
           步骤5.勾选【第一行包含列标题】,再点击【下一步】,【字段选项】不管,点击【下一步】;
           步骤6.选择【我自己选择主键】。右面下拉框里选择【姓名】字段,点击【下一步】;
图3.png
           步骤7. 【导入到表】选项你可以命名表名,这里就选择【表1】,然后确定【完成】,这样我们就将Excel【表1】导入到Access里了。使用同样的办法将【表2】也导入到Access里,见图示,这里不再赘述。
表4.png 完整表.png
         两张表导入到  Access我们就要进行下一步工作,也就是建立查询,这很重要,这也是我们要获取SQL语句的关键。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-19 13:03 | 显示全部楼层
本帖最后由 zhc19620430 于 2011-8-19 14:20 编辑

            上面我们建立了【表1】和【表2】两张表,现在创建查询,讲解如下:
      步骤1.选择【创建】功能的【查询设计】,会出现【显示表】,在【表】对话框双击【表1】和【表1】或选择【表1】按【添加】,再选择【表2】按【添加】,然后【关闭】;

          图1-1.png
       步骤2.  在【查询1】设计视图里会出现【表1】和【表2】,因为我们在导入表时就创建了主键,下面“姓名”左边的钥匙就是创建的主键,现在只要我们联接“姓名”即可;
图1-2.png
       步骤3.鼠标选择【表1】的【姓名】,按住左键不放拖到【表2】的【姓名】,然后再【字段】里就可以选择【姓名】,性别和年龄,表对话框及显示自动会出现【表1】和【表2】的字段选项及显示勾选;
         这里我要特别强调的是:当我们联接成功后双击两张表的连接线,会出现【联接属性】对话框,左表名称为主表表1,右表名称为子表。下面出现的3个选项,默认联接的类型是第一个选项“只包含两个表中联接字段相等的行”,它是“内部链接”,下面SQL代码就可以看得出来 图1-3.png 图1-4.png ; 第二个选项是左外部链接;第三个选择是右外部链接。      
             步骤4.   将鼠标放到【查询1】下方显示【表1】和【表2】的联接空白处点击鼠标右键,选择SQL视图,看下表,就会得出SQL语句:SELECT 表1.姓名, 表1.性别, 表2.年龄
FROM 表1 INNER JOIN 表2 ON 表1.姓名 = 表2.姓名;
            
步骤5.点击【查询工具】里的【设计】——【运行】或【视图】——【数据表视图】完成。
图1-5.png 结束1-6.png
              获取的SQL内部链接代码 SELECT 表1.姓名, 表1.性别, 表2.年龄 FROM 表1 INNER JOIN 表2 ON 表1.姓名 = 表2.姓名,我们需要在Excel数据透视表里使用,还需要加工方可使用。
修改后的代码如下:
    SELECT a.姓名, a.性别, b.年龄 FROM [表1$]a INNER JOIN [表2$]b ON a.姓名 = b.姓名
由于两张表的的联接关系是“姓名”,为避免混淆,我们使用“a”作为【表1】的前缀,如果select命令的字段在查询的表里是唯一的,那就没必要使用前缀。另外 Excel数据透视表使用SQL语句,表名一定要用 [ 表1  $]来表示,万万万不能直接套用。 qq网友问题1.rar (5.19 KB, 下载次数: 277)

TA的精华主题

TA的得分主题

发表于 2011-8-19 13:39 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-19 14:41 | 显示全部楼层
本帖最后由 zhc19620430 于 2011-8-19 14:52 编辑




       现在有三张表,同样使用ACCESS获取SQL语句,一个是【学生查询】sql代码:
SELECT DISTINCTROW 学生.姓名, First(选课.课程号) AS [课程号 之 First], Avg(选课.成绩) AS 平均值之成绩
FROM 学生 INNER JOIN 选课 ON 学生.[学号] = 选课.[学号]
GROUP BY 学生.姓名
大家可以改改试试。
ORDER BY Avg(选课.成绩) DESC;

【大于等80分的学生】SQL代码:
  SELECT 学生.姓名, 选课.课程号, 选课.成绩
  FROM 课程 INNER JOIN (学生 INNER JOIN 选课 ON 学生.学号 = 选课.学号) ON 课程.课程号 = 选课.课程号
  WHERE (((选课.成绩)>=85))
  ORDER BY 选课.成绩 DESC;
获取【出生日期,年龄和性别】的代码:

SELECT 学生.姓名, IIf([身份证号] Is Null,"",DateSerial(Mid([身份证号],7,4),Mid([身份证号],11,2),Mid([身份证号],13,2))) AS 出身日期, IIf([身份证号] Is Null,"",Year(Now())-Year([出身日期])) AS 年龄, IIf([身份证号] Is Null,"",IIf(Mid([身份证号],17,1) Mod 2=1,"男","女")) AS 性别
FROM 学生;
注意:你只要鼠标放到表的【大于等80分的学生】名称上点击鼠标右键,选择【SQL视图】就可以切换成代码区。看图。 12.png
   

数据库.rar

295.15 KB, 下载次数: 802

数据库.rar

295.15 KB, 下载次数: 424

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-19 14:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-8-19 15:58 | 显示全部楼层
有个问题请指教;当”表2"导入后保存时提示“名称已被使用,请输入其他名称......”是怎么回事,请指教,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-19 16:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
新纪元 发表于 2011-8-19 15:58
有个问题请指教;当”表2"导入后保存时提示“名称已被使用,请输入其他名称......”是怎么回事,请指教,谢谢 ...

说明你的表发生重复了,改表名试试。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-19 17:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 zhc19620430 于 2011-8-19 18:09 编辑

还是以上面《数据库》为例,获取 姓名,课程号和成绩,成绩大于等于70,你可以这样设置。看图:SQL代码:
SELECT 学生.姓名, 课程.课程号, 选课.成绩
FROM 学生 INNER JOIN (课程 INNER JOIN 选课 ON 课程.课程号 = 选课.课程号) ON 学生.学号 = 选课.学号
WHERE (((选课.成绩)>=70))
ORDER BY 选课.成绩 DESC;
这样我们就可以得到数据透视表。
数据透视表.gif
大于等于70.gif
2011-08-19_165812.png

TA的精华主题

TA的得分主题

发表于 2011-8-19 17:16 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-19 17:21 | 显示全部楼层
本帖最后由 zhc19620430 于 2011-8-19 17:21 编辑

做好的access数据透视表如何导入到原来Excel原表里?
看视频你就知道了,一定记住要学会改SQL代码。
导入表.gif

数据透视表.rar

27.94 KB, 下载次数: 203

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 23:59 , Processed in 0.053629 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表