求中国式交叉表

wazhqi 2003-08-08 08:17:51
A表
损耗类型 损耗名称
01 aaa
02 bbb
03 ccc
...
nn nnn


B表
项目名 子项目名 损耗类型 损耗数量 损耗金额
A aa 01 10 100
A aa 02 10 100
A aa 03 20 250
A aa 01 10 100
A bb 01 10 30
B cc 01 10 40
....
....
现按项目,子项目,统计分类汇总如下
损耗类型
项目名 子项目 aaa个数 aaa损耗数 aaa金额 bbb的个数 bbb损耗数 bbb金额 ...金额和
A aa 1 10 100 1 10 100 550
bb 1 10 100 100
A总计 2 20 200 1 10 100 650
B....
...
合计 ...
...全文
50 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wazhqi 2003-08-20
  • 打赏
  • 举报
回复
哦,谢谢
pengdali 2003-08-18
  • 打赏
  • 举报
回复
个数
损耗数量
损耗金额

都求出来了,你没有到查询分析器里运行一下???
wazhqi 2003-08-18
  • 打赏
  • 举报
回复
项目名 子项目 aaa个数 aaa损耗数 aaa金额 bbb的个数 bbb损耗数 bbb金额 ...金额和
A aa 1 10 100 1 10 100 550
bb 1 10 100 100
A总计 2 20 200 1 10 100 650
B....
...
合计 ...

就是aaa个数bbb个数呀
pengdali 2003-08-15
  • 打赏
  • 举报
回复
什么意思?
wazhqi 2003-08-13
  • 打赏
  • 举报
回复
TO 楼上
我已经改了,我再问一下计数怎样写呀,用count(*)只能得到总数,怎样得到各分类的个数呀
pengdali 2003-08-13
  • 打赏
  • 举报
回复
你改改呀。

declare @sql varchar(8000)
set @sql = 'select 项目名,子项目名'
select @sql = @sql + ',sum(case 损耗类型 when '''+损耗类型+''' then 1 else 0 end) ['+损耗名称+'个数],sum(case 损耗类型 when '''+损耗类型+''' then 损耗数量 else 0 end) ['+损耗名称+'损耗数],sum(case 损耗类型 when '''+损耗类型+''' then 损耗金额 else 0 end) ['+损耗名称+'金额]' from A表

exec(@sql+' from B表 group by 项目名,子项目名')
pengdali 2003-08-13
  • 打赏
  • 举报
回复
你改改呀。

declare @sql varchar(8000)
set @sql = 'select 项目名,子项目名'
select @sql = @sql + ',sum(case 损耗类型 when '''+损耗类型+''' then 1 else 0 end) ['+损耗名称+'个数],sum(case 损耗类型 when '''+损耗类型+''' then 损耗数量 else 0 end) ['+损耗名称+'损耗数],sum(case 损耗类型 when '''+损耗类型+''' then 损耗金额 else 0 end) ['+损耗名称+'金额]' from A表

exec(@sql+' from B表 group by 项目名,子项目名')
wazhqi 2003-08-12
  • 打赏
  • 举报
回复
TO pengdali(大力 V2.0)
你的方案尚可,但怎样计数呀
pengdali 2003-08-12
  • 打赏
  • 举报
回复
楼上你错了,我写的需要固定吗??
888888888888 2003-08-12
  • 打赏
  • 举报
回复
写个存储过程吧 很方便的
rmy 2003-08-12
  • 打赏
  • 举报
回复
pengdali(大力 V2.0)兄:
我说的不固定是说如学历:中专,小学,高中等 可能无穷。。。。
rmy 2003-08-11
  • 打赏
  • 举报
回复
如需帮助 QQ86325076
rmy 2003-08-11
  • 打赏
  • 举报
回复
上面几位的回答当损耗类型或项目名称固定时是可行的,但二者都不固定时就比较困难了;
交叉表是MIS系统中常遇到的问题:
当二者之一固定时我用上述办法,当都不固定时用REPORTBUID 报表工具可实现交叉报表,只是其格式不太美观。
XXSingle 2003-08-11
  • 打赏
  • 举报
回复
值得顶一顶............
huojiehai 2003-08-09
  • 打赏
  • 举报
回复
这个我做过,就是运算量太大了
szlifei 2003-08-09
  • 打赏
  • 举报
回复
请参阅http://www.csdn.net/develop/Read_Article.asp?Id=20229"在Delphi中自己建立交叉表"
像上面的例题只要用SQL生成如下的数据再自己建立建立交叉表就可以轻松做到

aa aaa个数 10
bb bbb个数 15
cc aaa金额 1000

祝好运
whitehare 2003-08-08
  • 打赏
  • 举报
回复
对不起漏谢了
select 项目名, 子项目,
(case 损耗类型 when 01 then sum(损耗数量) else 0 end ) as aaa个数
(case 损耗类型 when 02 then sum(损耗数量) else 0 end ) as bbb个数
(case 损耗类型 when 03 then sum(损耗数量) else 0 end ) as ccc个数
.
.
.
from B表
group by 项目名, 子项目

如果A表
内容不定,可以根据A表动态生成SQL语句;
whitehare 2003-08-08
  • 打赏
  • 举报
回复
select 项目名, 子项目,
(case 损耗类型 when 01 then sum(损耗数量) end ) as aaa个数
.
.
.
from B表
group by 项目名, 子项目

如果A表
内容不定,可以根据A表动态生成SQL语句;
lipeiqiang 2003-08-08
  • 打赏
  • 举报
回复
好題目,
期待之中,
pengdali 2003-08-08
  • 打赏
  • 举报
回复
如果你是SQLServer可以动态获得你说的损耗类型:

create table 你的表(姓名 varchar(100),学历 varchar(100),部门 int)
insert 你的表 values('n1','aa',11)
insert 你的表 values('n2','bb',1)
insert 你的表 values('n3','aa',45)
insert 你的表 values('n4','cc',81)
insert 你的表 values('n5','a',11)
insert 你的表 values('n6','aay',561)
insert 你的表 values('n7','a',14)

declare @sql varchar(8000)
set @sql = 'select 部门'
select @sql = @sql + ',sum(case 学历 when '''+学历+''' then 1 else 0 end) ['+学历+'的人数]'
from (select distinct 学历 from 你的表) a

select @sql =@sql+' from 你的表 group by 部门'

exec(@sql)

drop table 你的表
加载更多回复(3)

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧