ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: whsfhwm

[求助] 如何编写SQL语句来引用被定义为动态名称的数据源?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-2-26 16:29 | 显示全部楼层
也碰到过这样的问题,非常感谢,希望LZ能总结一下,发个帖子,让大家一起学习

TA的精华主题

TA的得分主题

发表于 2011-6-12 00:22 | 显示全部楼层
原帖由 wuxiang_123 于 2010-4-24 11:41 发表
当我们不指明区间时,SQL会智能为我们选择区间,从而减少不必要的运算。假如直接使用区间,SQL就会在这个区间查询每一条记录,当区间大时,即使实际的记录很少,也会查询很久。其实,只要善用条件,一样可以实现。利 ...


老师是说:select * from (select 表1 as 月份,F2 as 部门,F3 as 物品,f4 as 数量 from [sheet1$] union all select 表2,F7,F8,F9 from [sheet1$]) where 数量 is not null就要比select * from [sheet1$a3:d65535] where 月份 is not null  union all select * from  [sheet1$f3:i65535]  where 月份 is not null 快,但经过测试并没有发现速度上有明显差别啊

TA的精华主题

TA的得分主题

发表于 2011-6-12 09:23 | 显示全部楼层

回复 34楼 hustnzj 的帖子

数据不够多,测试速度不够明显.可以用VBA的TIME(好象是这么拼)函数来测试速度.

TA的精华主题

TA的得分主题

发表于 2011-6-12 12:04 | 显示全部楼层
原帖由 wuxiang_123 于 2011-6-12 09:23 发表
数据不够多,测试速度不够明显.可以用VBA的TIME(好象是这么拼)函数来测试速度.


使用VBA?可是我不会在VBA里写SQL啊……老师

TA的精华主题

TA的得分主题

发表于 2011-12-7 19:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-7 23:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-8 09:29 | 显示全部楼层
wuxiang_123 发表于 2010-4-28 23:35
用條件的建議使用07或10,生成的記錄會有顔色,效果會更明顯.

我怎么觉得你的解释还是没说明问题的实质。单表一般是直接使用数据透视表来透视,这时透视表选择的数据区域是绝对区域,而不是动态的区域(要选择动态可以改变字段为相对引用,但必须指明多少行,如A1:E65536,而A1:E这样的形式是错误的)。所以,使用动态区域往往就用函数或列表来解决。多表汇总除了特殊情况(比如多重合并计算区域、micosoft Query)好多都是使用SQL来解决,比如下面的语句:
select * from[东店$] union all
select * from[西店$] union all
select * from[南店$] union all
select * from[北店$]
from[东店$]的$后面实质选择的就是当前工作表的所有行,除非在一张表里有两组或两组以上的数据及其他特殊情况,才在$后面指定字段或行区域,一般情况下没必要再指定字段或行区域。当你增加行数据后,数据透视表的SQL会智能的向下扩充行,但你必须要刷新数据。
这是我理解,不知对不对,大家可以商讨。

TA的精华主题

TA的得分主题

发表于 2011-12-8 12:37 | 显示全部楼层
zhc19620430 发表于 2011-12-8 09:29
我怎么觉得你的解释还是没说明问题的实质。单表一般是直接使用数据透视表来透视,这时透视表选择的数据区 ...

【对比】工作表内有分别以“数据源$”、“数据源$A:D”、“数据源$A2:D”和“数据源$A2:D11”四张不同表范围作为数据源列表创建的查询。这四张数据源列表表示的意义各不相同的。
“数据源$”:以【数据源】工作表第一行到【数据源】工作表最后一个有效单元格所在的行形成的区域作为查询数据源表。
“数据源$A:D”:以【数据源】工作表第一行到【数据源】工作表最后一个有效单元格所在的行形成的区域作为查询数据源表。假设【数据源】工作表最后一个有效单元格是F1000,那么,此时的“数据源$A:D”=“数据源$A:D1000”,如【数据源】工作表的有效单元格变为F2000,那么,“数据源$A:D”自动扩充为:“数据源$A:D2000”。
“数据源$A2:D”:以【数据源】工作表第二行到【数据源】工作表最后一个有效单元格所在的行形成的区域作为查询数据源表。假设【数据源】工作表最后一个有效单元格是F1000,那么,此时的“数据源$A2:D”=“数据源$A2:D1000”,如【数据源】工作表的有效单元格变为F2000,那么,“数据源$A2:D”自动扩充为:“数据源$A2:D2000”。
“数据源$A2:D11”:以【数据源】工作表第二行到“A2:D11”区域内最后一个有效单元格所在的行形成的区域。
区别:假如表没有指明区域,则指返回整张工作表从第一行到最后一个有效单元格所在的行形成的区域作为数据源。否则,返回指定区域的起始行到结束行所形成的有效区域。
指明区域的好处:
1:简化语句,限制返回的字段数目和记录数目
2:在特殊情况下,指定区域还可以大大提高查询效率。
理解表范围,还需要理解真空和假空。

有兴趣可以下载下面的附件加深理解:

数据源:
数据源.jpg

对比:
对比.jpg

表范围.rar

3.63 KB, 下载次数: 62

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-8 12:52 | 显示全部楼层
这个没错呀。指定行是以标题行开始的,既就是函数或表也一样,这大家都知道,这里是说$后面本来就是自动向下扩充的,没必要在指定范围,除特殊情况,就像你那张工作表。实际数据透视表多工作表本身也可以扩充列字段,只需在选项里指定就可以。

TA的精华主题

TA的得分主题

发表于 2011-12-8 12:54 | 显示全部楼层
wuxiang_123 发表于 2011-12-8 12:37
【对比】工作表内有分别以“数据源$”、“数据源$A:D”、“数据源$A2:D”和“数据源$A2:D11”四张不同表范 ...

你说的是特殊情况,要理解常规下的多表$后面的问题。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 01:53 , Processed in 0.037230 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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