设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4844|回复: 10
打印 上一主题 下一主题

交叉表在ADP里做不成功

[复制链接]
跳转到指定楼层
1#
发表于 2002-3-18 05:43:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
交叉表在ADP里做不成功,我是直接把MDB里做的交叉表的SQL语句挪过来的,不行,在SQL SERVER里有些什么要注意的吗?[em01][em01]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
11#
发表于 2003-5-20 00:13:00 | 只看该作者
我在ACCESS2000-ADP的存储过程中做了个动态的交叉表,在SQL-SERVER2000的查询分析器中运行正确,但在ACCESS2000-ADP中却只显示了开始的一列!请问有人知道原因吗?
10#
发表于 2003-5-7 20:45:00 | 只看该作者

举个例子大家讨论一下!!!!!!!!!!!

以下是引用andy在2002-9-24 20:37:01的发言:
在SQL2000中交叉表完全可以实现。在SELECT中使用CASE...WHEN...ELSE...END语句。

能否举个例子大家讨论讨论
9#
发表于 2002-9-25 04:37:00 | 只看该作者
在SQL2000中交叉表完全可以实现。在SELECT中使用CASE...WHEN...ELSE...END语句。

点击这里给我发消息

8#
发表于 2002-7-31 18:14:00 | 只看该作者
应该是通过Jet引擎实现, SQL 2000同样不支持TRANSFORM...PIVOT语句。也就是说用mdb+链接表,再使用交叉查询,应该可以实现的。

另一法是通过SQL语句现在:

下面,是别人做例子,也许有参考价值:
假定有一个表 Pivot,其中每季度占一行。对 Pivot 的 SELECT 操作在垂直方向上列出这些季度:

Year     Quarter      Amount
----     -------      ------
1990 1          1.1
1990 2          1.2
1990 3          1.3
1990 4          1.4
1991 1          2.1
1991 2          2.2
1991 3          2.3
1991 4          2.4

生成报表的表必须是这样的,其中每年占一行,每个季度的数值显示在一个单独的列中,如:

Year Q1 Q2 Q3 Q4

1990 1.1 1.2 1.3 1.4

1991 2.1 2.2 2.3 2.4

那么用于创建旋转结果的 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

从中看出,select肯定是可以写的,比如上面例子中的合并成4个季度
你的就是

SELECT id,
    SUM(CASE Size WHEN 36 THEN Qty ELSE 0 END) AS size36,
    SUM(CASE Size WHEN 38 THEN Qty ELSE 0 END) AS size38,
    SUM(CASE Size WHEN 40 THEN Qty ELSE 0 END) AS size40,
    SUM(CASE Size WHEN 42 THEN Qty ELSE 0 END) AS size42
......
FROM tablename
GROUP BY id

不过前提是你要知道到底要合并成几列,也就是说到底有多少size

当然,这个也不是那么死的,要不然,就不要我们这些程序员了
可以这样,先查出所有的size,这个是很快的
select size from xxx group by size
接着作循环
当然,是循环拼出那句sql
do while not rs.eof
sql=sql & "SUM(CASE Size WHEN " & cstr(rs(0)) & " THEN Qty ELSE 0 END) AS size" & cstr(rs(0)) & ","
rs.movenext
loop
然后去掉最后一个","拼上头尾,ok!

不过有个需要考虑的,那就是如果一句sql过长,那么有可能堵塞ado,需要再好好琢磨
写的仓促,也没有测试,呵呵


[em26]
[此贴子已经被zhuyiwen于2002-7-31 10:13:45编辑过]

7#
发表于 2002-7-31 15:31:00 | 只看该作者
即然交叉查询在SQL7。0中做不成功,或在SQL2000中不知道是否可以做成功,不过还是有一个地方可以做成功的,那就是将交叉查询的语句放进VBA中一定行,我试过可以。
6#
发表于 2002-3-19 05:44:00 | 只看该作者
可以做,但较麻烦!在《SQL SERVER 7编程技术内幕》这本书有例子我看得不是很明白!
5#
 楼主| 发表于 2002-3-18 06:00:00 | 只看该作者
镶个金牙,看好看不。

点击这里给我发消息

4#
发表于 2002-3-18 05:54:00 | 只看该作者
我发现,不光是ACCESS,还有SQL SERVER,我的都是老掉牙啦
3#
 楼主| 发表于 2002-3-18 05:51:00 | 只看该作者
2000里面是可以的,但是帮助看的一头雾水,还没解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-2-27 12:57 , Processed in 0.091494 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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