一个交叉表同电子表相类似。该语句可以将表中的某些数据作为行,某些数据作为列建立交叉表。该语句的语法如下:
transform condition [select opreation] pivot column
其中condition是在交叉表中要显示的数据,select opreation 是一个select...from... 查询,该查询形成交叉表的
航信息,pivot recordset中column为表中的一个字段,pivot子句使用该字段形成交叉表的列。
范例六:建立学生成绩表
我们还是使用上面已经建立的db4.mdb中的db2表。首先建立一个新的工程,然后在form1中加入一个datagrid控件,然后
向工程中加入一个dataenvironment,在connection1上点击鼠标右键,在菜单中选择 properties... ,在属性窗口的 提供者
页面中选择 microsoft jet 4.0 ole db provider ,在 连接 页面的数据库名称输入框中输入 c:\db4.mdb ,然后点击 测试
连接 按钮,如果正常,点击确定退出。再在connection1上点击鼠标右键,在菜单中选择 add command 建立一个名为command1
的命令,点击command1右键菜单,选择 properties... 项,然后在command1属性窗口的general页面中选择 sql statement,
在sql查询语句输入框中输入下面的查询:
transform sum(db2.成绩)as ires select db2.学生 from db2 group by db2.学生 pivot db2.科目
注意文本框回自动换行,不要输入回车。然后点击确定按钮。
回到form1,将datagrid1的datasource设置为dataenvironment1,将datamember设置为command1,然后运行程序,可以看
到在datagrid1中以表的形式列出了学生成绩,以学生为行,以成绩为列。运行后得到的表格效果如下:
学生 数学 英语 语文
李永 90 94 93
王为 87 98 91
张严 96.5 80.5 86.5
再回到dataenvironment界面,双击command1就可以看到查询建立的数据列,在上面的查询共建立了4个数据列,其中三个
分别是科目分类,列中的数据为科目成绩,第一列为学生的名字,列中的数据为学生的名字。
上面的查询中还使用了sum子语句,这时因为对于group by来说,没有包含在统计函数内的列都要包含在group by中,如果
将字段db2.成绩包含在 group by 子语句中,就会使最终结果出现9行而不是3行。由于每个学生的每科成绩只有一个,所以可以
使用sum函数将字段db2.成绩排除在group by外面。