Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • ADO编程隐藏表
  • DAO基础(3)
  • 使用ADO修改数据库的密码
  • 通过字段名来获取字段标题的..
  • 跟我学SQL
  • 在ADP中调用有参存储过程..

最新文章

  • 实验报告 --DAO与AD..
  • 用代码创建mdb格式的Ac..
  • 连接后台数据库提示 无法启..
  • 64位windows系统如..
  • Access的DAO准确获..
  • 利用代码自动创建ODBC源

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > DAO/链接表/ADO/ADP
DAO/链接表/ADO/ADP

ADP 中如何实现交叉表查询?

 

 

 

 

 

 

 

 

 

问题:

ADP 中如何实现交叉表查询? 

 


回答:

ADP 中不存在交叉表查询的一句,我们只能用标准的 T-SQL 语句来组织数据达到交叉表查询的效果。

其实大家只要参考联机丛书中的“交叉数据报表”和“FETCH Transact-SQL 参考”两个章节自己也能完成 T-SQL 的交叉表查询功能。

现在开始看下面代码吧


USE Northwind
GO

IF EXISTS(SELECT name 
      FROM      sysobjects 
      WHERE  name = N'pivot' 
      AND      type = 'U')
    DROP TABLE pivot
GO

-- 用 T-SQL 的 DDL 语句创建一个演示用的表
CREATE TABLE Pivot
( Year      SMALLINT,
  Quarter   TINYINT, 
  Amount      DECIMAL(2,1) )
GO

-- 对这个演示用的表插入数据
INSERT INTO Pivot VALUES (1990, 1, 1.1)
INSERT INTO Pivot VALUES (1990, 2, 1.2)
INSERT INTO Pivot VALUES (1990, 3, 1.3)
INSERT INTO Pivot VALUES (1990, 4, 1.4)
INSERT INTO Pivot VALUES (1991, 1, 2.1)
INSERT INTO Pivot VALUES (1991, 2, 2.2)
INSERT INTO Pivot VALUES (1991, 3, 2.3)
INSERT INTO Pivot VALUES (1991, 4, 2.4)
-- 下面这行在 SQL SERVER 的联机丛书中是没有的,为了验证我们自己写的交叉表查询,需要增加一列
-- 其中的 5 可是随便写的,实际中可不会存在哦

INSERT INTO Pivot VALUES (1991, 5, 2.4)


GO

--下面是用于创建旋转结果的 SELECT 语句:

SELECT Year, 
    SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
    SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
    SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
    SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO

-- 上面部分都是照抄联机丛书的
-- 下面开始可就是我们自己写的咯

declare @a TINYINT
declare @nSQL nvarchar(4000)
-- 注意,以下这句是必须的,否则 @nSQL 就是 NULL ,NULL 与字符串相加都是 NULL
set @nSQL =''

-- 下面开始就是用游标读取 pivot 表中的 quarter 这列有多少不重复数值了,一个数值将生成一列
-- 有关游标的使用基本是从联机丛书《FETCH Transact-SQL 参考》这个章节COPY 过来的
-- 不同的是增加了 into @a 这句,这句的目的是将游标所指的这一行的某一列(quarter)的数值存入变量

DECLARE Quarter_cursor CURSOR FOR
SELECT Distinct [Quarter]
FROM Northwind.dbo.pivot

OPEN Quarter_cursor

FETCH NEXT FROM Quarter_cursor into @a
WHILE @@FETCH_STATUS = 0
BEGIN
    -- 只要以文字方式组织联机丛书中的
    --  'SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1' 
    -- 这行代码即可。

    set @nSQL=@nSQL + ',sum(case quarter when ' + cast(@a as nvarchar(5)) + ' then amount else 0 end) as q' + cast(@a as nvarchar(5)) + ' '
    FETCH NEXT FROM Quarter_cursor into @a
END

CLOSE Quarter_cursor
DEALLOCATE Quarter_cursor

-- 最后是仍旧按照联机丛书的 SELECT 语句的格式把 SQL 语句组织起来
set @nSQL='select year' + @nSQL + 'FROM Northwind.dbo.Pivot GROUP BY Year'
-- 打印出完整的语句看看:
print @nsql

-- 将结果集输出即可
execute sp_executesql @nsql
go

发布人:cg1-access911.net  
分享到:
点击次数:  更新时间:2009-04-17 09:01:50  【打印此页】  【关闭】
上一条:什么是 ADP ,如何建立 ADP  下一条:vba的instr到sqlserver存储过程该怎么写?



相关文章

  • • 实验报告 --DAO与ADO效率之比较
  • • 用代码创建mdb格式的Access文件
  • • 连接后台数据库提示 无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开 的解决办法
  • • 64位windows系统如何使用64位的ADO连接Accesss accdb数据库(ACE.OLEDB)
  • • Access的DAO准确获取记录集Recordset的记录数Recordcount
  • • 利用代码自动创建ODBC源
  • • 在打开Ado记录集之前尽量先判断记录集有否打开,如打开则先关闭之
  • • 快速获取Excel文件所有工作表表名

热门文章

  • [2013-06-26] 更新访问权限 (Jet) 数据库中的 40 多个字段access数据库
  • [2009-06-22] DAO基础(2)access数据库
  • [2004-01-29] Microsoft数据引擎 MSDEaccess数据库
  • [2009-08-17] 用DAO或ADO正确访问Access 2000access数据库
  • [2003-12-13] 配置ODBC数据源access数据库
  • [2005-02-06] 如何使用ADO的FetchProgress和FetchComplete事件access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn