如何实现这样的交叉表查询
数据表的结构为:
公司代码 物品代码 信息1 信息2 日期
1 wp1 100 10 2003-1-1
1 wp2 200 20 2003-1-1
1 wp3 300 50 2003-1-1
2 wp1 400 70 2003-1-1
2 wp2 500 90 2003-1-1
2 wp3 600 110 2003-1-2
……
现在需要形成这样的交叉表结果:
公司代码 wp1.信息1 wp1.信息2 wp2.信息1 wp2.信息2 wp3.信息1 wp3.信息2 ……
1 汇总结果 汇总结果 汇总结果 汇总结果 汇总结果 汇总结果
2 汇总结果 汇总结果 汇总结果 汇总结果 汇总结果 汇总结果
需要说明的是:
·对于每个物品,有两个并列的需要汇总的信息
·汇总的结果需要动态参考原表中的日期条件
·物品的种类是未知的,所以不能在数据库中预先定义临时表
我使用的是access表
若对一种物品信息汇总,可以简单的建立交叉表实现
我也可以对这两的汇总信息分别建立交叉表,然后将两个交叉表结果根据公司代码再联成一个查询
请问有没有简单的方法,可以一次建成呢?
另:
关于日期查询条件,如何在access中的交叉表中为某字段设一个查询条件参数呢?
我用Delphi可以在前端用动态语句形成交叉表,但我只会对一种汇总信息进行交叉查询的语句。而两个在前端形成的临时交叉查询,如何将之联在一起呢?
问题点数:100、回复次数:9Top
1 楼qi_gu(苦瓜)回复于 2003-01-02 16:54:19 得分 10
你说的太抽象了,其实你想做的大概就是对不同的信息进行汇总,而这些信息你可以自己定义,是吗,在动态生成group by 相关的sql语句,注意,select 部分和group by 部分要一致.这大概是最简单的做法了.Top
2 楼jaguarcts(xzh2000)回复于 2003-01-02 19:24:24 得分 0
upTop
3 楼leaya11(lee)回复于 2003-01-02 20:28:08 得分 60
我比较笨!建一个临时表,用算法填充,我以前做过一个。但把ASSCE的最大字段数用过了,256个。唉,我的SQL比较差。最大字段数,你要小心呀!Top
4 楼yekehe(河子)回复于 2003-01-02 20:32:03 得分 10
select 公司代码,物品代码,sum(信息1),sum(信息2) from table
where .......
group by 公司代码,物品代码Top
5 楼simonzone(马叉虫)回复于 2003-01-02 20:34:24 得分 10
我觉得可以这样:
select
公司代码,
sum( case 物料代码 when wp1 then 信息1 else null end) as wp1.信息1,
sum( case 物料代码 when wp1 then 信息2 else null end) as wp1.信息2,
sum( case 物料代码 when wp2 then 信息1 else null end) as wp2.信息1,
sum( case 物料代码 when wp2 then 信息2 else null end) as wp2.信息2,
.......
from yourtablename
groub by 公司代码
order by 公司代码
Top
6 楼kaidu(Roger)回复于 2003-01-02 20:44:34 得分 0
upTop
7 楼tfxg()回复于 2003-01-03 09:13:30 得分 10
select 公司代码,物品代码,sum(信息1),sum(信息2) from table
where .......
group by 公司代码,物品代码
这样写差不多了。Top
8 楼2961(沉然)回复于 2003-01-06 15:51:25 得分 0
谢谢 leaya11(lee) 的提醒。
我用sql语句先求出了汇总结果,用了临时表暂时解决了这个问题。Top
9 楼go1go(my fly)回复于 2003-04-11 19:51:03 得分 0
如下(score_info):
原表:xh xm kcmc kscj
1 fgl yw 45
1 fgl sx 78
2 ykw yw 54
2 ykw sx 98
显示成
xh xm yw sx 总分
1 fgl 45 78 123
2 ykw 54 98 152
在access2000是,可用sql 实现:transform sum(kscj)as 总分 select xh,xm from score_info group by xh,xm pivot kcmc
可是用sql2000时,就不能,急!!!
并且课程名称是动态选择的Top




