联系使用Excel和SQL(1)


当今,许多公司都使用SQL Server来处理关于产品、服务和支持方面的数据――所有那些你能够想象得到的数据。通常,安装有SQL Server的公司都同时安装有非常庞大和贵重的软件应用程序,这些应用程序是用来从数据库中插入和查找数据用的。当这些应用程序能够确实起到一些作用的时候,并且这些程序需要在不同的情况下将数据导入到SQL Server的环境下,如何生成报表就成了一个问题。

对于大多的用户来说,将SQL Server中的数据创建一个报表显示出来是非常直观的、显而易见的。通过使用简单的操作,你就可以创建一个代表当前SQL Server数据的文档给你的用户,而你的用户并没有意识到这些数据是存储在一个庞大的数据库中的,并且有许多的数据支持着它的存在。这时,你就可以通过使用Excel电子表格来显示更多的相关数据,下面就是如何操作的步骤:

作者提示

这篇文章是基于两个软件的――SQL Server 和 Excel。这篇文章会帮助你了解如何将这两个软件天衣无缝地衔接起来,来进行数据的输出。通过这种方法,你所提供的报表和信息将帮助他们更有效地进行工作,并且可以减少用户们求助公司DBA的频率。

为了明确表达这篇文章的目的,我将使用SQL Server 2000的Evaluation版和Office XP。你至少需要安装微软的SQL Server 的运行版本和微软的Excel或者Office。我将使用Northwind数据库,它是在SQL Server标准版和企业版中都包含有的数据库。这个数据库对于微软的Access也是适用的

一些小的先决条件

大多的办公环境都使用微软的Office产品,所以安装Excel应该不成问题。然而,安装SQL Server则要花费一个大代价,并且,如果你的公司并没有交付SQL Server的使用费用,并且也没有意愿要交付SQL Server的使用费用,这或许是一件麻烦的事情,但是,不要担心。微软创建了一个桌面版本,可以免费 下载

使用。它可以支持更高版本的数据,但是不提供所有有关设计数据库方面的工具。

在Excel中创建有用的报表,首先需要进行的第一个步骤就是获取那些每天使用Excel的人群的意见。例如,当用户从某个特定的部门出来的时候,你可以问他几个问题,或者寻求一些帮助;如果他们在报表或者获取数据方面有些问题,那么,这个解决方案也许就会提供相应的解决方法。在下面的步骤中,我将创建一个快速报表给Phil,他是一个市场部的雇员,这个报表中将包括购买Sasquatch Ale的用户信息和购买数量。

在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按钮,选择默认的信息。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus