开发者社区


首页 - 数据库
数据库
全文搜索:   

[SQL]联系使用Excel和SQL
作者: TechRepublic.com
2004-06-22 15:36:35



在SQL Server中获取数据
在你收集完适量的信息之后,就可以开始对这些数据进行处理了。通过我的经验,我发现创建一个Excel报表的最好的方式就是在Microsoft Query Analyzer 中创建这个报表,或者使用Office自带的一些工具,如Microsoft Query,测试它们的有效性,而不完全依赖与它的向导。

如果你生成的报表需要从许多数据库表格中获取堆积成山的数据,那么,从SQL Server中获取数据信息就将会变得非常困难。如果你需要访问种类繁多的数据库表格,那么,使用Query 向导也许会是创建报表的一个好的选择。它允许在SQL语句包括注释,那么,在你不干的时候,你就可以让其他人接手你的工作,或者,在某些情况下,可以接着创建一些查询。

报表显示了哪些顾客购买了Sasquatch Ale,并且显示了每个顾客购买的数量,这个报表关联到一个查询语句和四个数据库表格:Customers, Orders, Products, 和Order Details。这个关系到三个表格的查询语句也许最初看起来会有些复杂,特别是当你创建了你自己的SQL语句的时候;但是,你会发现,它并不是我们所想的那样。

如果你单独查看每个元素,并且通过其它的语言将它凑合到一起,它会立即按顺序排列。如果要查找顾客的信息、公司信息和联系姓名,你就需要从Customers 表格中选择这些信息。这个表格同时还包括了customer ID,这个ID信息就可以使得用户按顺序访问顾客信息。

在Orders表格中,包括顺序的ID信息和customer ID。这两个ID信息应该被看作是你选择信息的一个方法。当你不需要显示Orders 表格中的任何信息的时候,你必须做一个pit stop,来获取order ID 。一旦这通过一个简单的连接语句实现了,你就可以选择按照每个顾客购买数量的顺序排放,通过其他的连接语句,还可以按购买日期排列。

最后一个连接语句就是关于Products表,按照姓名和产品顺序排放。下面是选择语句代码的编写顺序:
-- 查找定购了Sasquatch Ale 的顾客,他们定购的数量和定购日期
-- 告知SQL Server你的查询应该选择的数据库。默认选择的是Master 数据库
使用northwind数据库
-- 创建一个选择表格中需要列的查询语句
select cust.companyname, cust.contactname, orddet.quantity, ord.orderdate, prod.productname
from customers cust inner join orders ord on cust.customerid = ord.customerid inner join [order details] orddet on ord.orderid = orddet.orderid inner join products prod on orddet.productid = prod.productid
where prod.productname = 'Sasquatch Ale'

上面代码例子的输出结果在A中显示:



这些表格按照同样的列进行连接。例如,Customers 和 Orders表格是按照customer ID来进行连接操作的:
inner join orders ord on cust.customerid = ord.customerid

这些表格同样还有它们名字的一些别名。这些别名可以使代码变得简单,我通常使用cust来代替customers,使用ord来代替orders。那么,当我要使用Customers表格中的contactnamn列或者Orders表格中的orderdate的时候,我就可以使用cust.contactname ord.orderdate通过使用这种方法,可以使得查询语句变得简练一些。当你正在创建大量的数据查询语句的时候,一些关键字可能会非常起作用。

这个查询语句并不简单。它需要连接四个表格来查找需要的数据。同时,在上面的查询代码中,跟在Where从句后面,我可以添加order by ord.orderdate,这样就可以使输出结果按照定购时间顺序排列。

如何在Excel中使用它
现在,我将会从Excel的角度看这条查询语句。在Excel中,选择Data ->Import External Data ->Select New Database Query。当你选择了New Database Query 菜单选项的时候,你将看到如图B所示的界面,它会让你选择一个DSN。



如果没有创建一个SQL Server的DSN怎么办?简单地选择界面中右侧的OK按钮,选择默认的信息。

DSN, DNS, ODBC:这些是什么意思?
当你使用Excel连接到SQL Server上的时候,你就创建了一个开放数据库连接(Open Database Connectivity (ODBC) )连接到数据库上。这些连接和数据源姓名(Data Source Names (DSNs))相关,有时也被误写为DNS,做为在英特网上使用的区域名。


选择界面右侧的OK按钮。你将会看到打开了一个创建新的数据源的向导,如图C所示:



你可以自己定义DSN的姓名,并且选择你连接的数据源类型。在这种情况下,点击下拉菜单,选择最后一个数据源(SQL Server),然后点击Connect按钮。

在SQL Server登陆界面中,你需要指定你的SQL Server 2000服务器机器的名字,同时还要输入登陆密码,以允许你的DSN成功地连接到SQL Server上。如果你的数据库服务器使用的是Windows的帐号和密码授权,选中Use Trusted Connection的复选框,然后点击OK。这种连接方式在图D中显示出来:



如果你的SQL Server使用SQL来进行登陆的,或者用户帐号是在SQL Server中创建的,那么,你就需要考虑来创建一个只读的SQL登陆帐号给其它的程序使用。如果你已经创建了一个帐号了,键入登陆名和密码,然后点击OK。

如果你需要确保你的数据源在如图D进行登陆的时候,总是能够连接到合适的数据库中去,你可以点击Options按钮,并且选择默认的数据库。在这种情况下,数据库就会是Northwind。然后点击OK,并且进行向导的下一个步骤。当这个步骤不是必须的时候,它可能会使得这个过程更容易一些。图E显示了如何进行选择。



接下来向导会使用你给定的确认信息建立数据库的连接,并且会询问你是否希望给这个DSN指定一个表格,如图C中显示的一样。你用不着填写这些信息。因为你的查询将使用到多个表格,所以没有必要去指定特定的一个表格。保存用户名和密码,如果你创建了一个SQL的登陆信息作为只读用的,那么将它们(用户名和密码)作为DSN的一部分保存起来是一个比较好的主意;这样,你在进行报表处理的时候,就不需要特地填充用户名和密码了。

一旦你填充了所有的必要部分,点击OK按钮。这时就会返回到你选择A数据源的界面,但是这一次,在你的列表中就会显示有你所创建的新的DSN信息。选择你所创建的DSN信息,并且点击OK按钮。

在下一个界面中,你就会见到如图F所示的查询向导。在这里,你可以展开表格前面的“+”号,通过高亮化你希望选择的列来选择默认的数据库中表格的某几列(如果你事前选择了一个数据库)。选择中间的单箭头来将该列导入到列表中去。



在你选择完你想要使用的列,点击Next。你将会要求填写输出集。当你在填写这些输出集合的时候,你实际上就是在建立查询语句中的WHERE的功能。如果你只希望看到order ID等于三的结果,那么你就按照图G来进行配置。

 



当你填充好你希望的输出结果之后,点击Next,告知查询向导你所希望的结果存储方式。这个界面显示了你在每个下拉菜单中所选择的列。如果你选择了一列,那么结果就会按照你选择的每一列存放。

在向导的最后一个界面中,你可以接着在Microsoft Query中修改你的查询要求,Microsoft Query 允许你进一步制定你所接收到的结果,或者,你可以创建一个OLAP查询,或者将结果返回到Excel中去。在向导的这一部分中,我将添加一些查询,并且将结果用Microsoft Query和Excel的形式表现出来(如图H和图I)。



当你确实将数据结果返回到Excel中的时候,也许是通过向导,或者是通过Microsoft Query 。你都将被要求选择一个存放数据的空间。如果你打算包括报表的标题,那么你就可以适当的多留出一点空间,并且从大约第六行的开始存放数据。如果你选择在Microsoft Query 中查看查询信息并且进行进一步的修改,工具条上的图标显示为一个带有箭头的门,这个按钮是将数据返回到Excel中的一个功能键。

偶尔奏效的一种办法

当你使用一个更复杂的查询的时候,就如同我在上面举的这个例子,不是使用向导,而使用Query Analyzer (上文已经显示过)或者Microsoft Query来进行这个查询,就会变得简单得多。为了完成这个工作,在向导要求的时候就随便选择一列。接下来点击Next三次,并且选择在Microsoft Query 中查看数据或者修改查询。点击Finish,那么你就会看见你在Microsoft Query 中所选择的记录。在Microsoft Query窗口的最上端高亮化那个以图形显示的数据库表格。然后选择Table->Remove Table。点击工具栏上的SQL按钮,手动输入你的查询语句或者粘贴上最初的查询代码,点击OK按钮。



责任编辑:李宁

欢迎评论投稿

【上一页】 【下一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号