Foxtable(狐表)用户栏目专家坐堂 → 求用SQL代码生成统计表


  共有11059人关注过本帖树形打印复制链接

主题:求用SQL代码生成统计表

帅哥哟,离线,有人找我吗?
lihe60
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
求用SQL代码生成统计表  发帖心情 Post By:2012/11/13 7:54:00 [显示全部帖子]

数据库为表A,求用SQL代码生成表B和表C.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.table


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/13 8:17:00 [显示全部帖子]

sgs,这是刚上传的,请看这个附件。

其他朋友也可以帮助哟。


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/13 22:41:00 [显示全部帖子]

以下是引用sgs在2012-11-13 10:14:00的发言:

Select 科目名称,金额 from {表A} where instr([科目名称],chr(92)) = 0
union
Select 科目名称,sum(金额) As 金额 from (Select mid([科目名称],1,instr([科目名称],chr(92))-1) As 科目名称,金额 from {表A} where Instr([科目名称],chr(92)) > 0) group by 科目名称

 

恩,大概就是这个思路,这段代码是表B的,表C的语句你参照这个想想先

可以统计出表B,对这个代码已是眼花瞭乱了。对于表C,就不敢想了,照葫芦画不出瓢了。

[此贴子已经被作者于2012-11-14 6:24:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/13 23:14:00 [显示全部帖子]

以下是引用sgs在2012-11-13 22:47:00的发言:
换个思路也许有更好的方法,比如从数据结构上修正下

表格换了一下,再请教。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.table


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/14 6:15:00 [显示全部帖子]

以下是引用lin_hailun在2012-11-13 9:55:00的发言:
 楼主,我试了一下,你在狐表的sql窗口执行一下,可以截取出值,但是,这个代价太大。

select
iif(Instr(科目名称, '\') = 0, left(科目名称, len(科目名称)), iif(InStr(Right(科目名称, cint(Len(科目名称) - Instr(科目名称, '\'))), '\') = 0,
left(科目名称, len(科目名称)),
iif(InStr(Right(科目名称, cint(Len(科目名称) - Instr(科目名称, '\') - len(Right(科目名称, cint(Len(科目名称) - Instr(科目名称, '\')))))), '\') = 0,
left(科目名称, cint(Instr(科目名称, '\') + (Len(科目名称) - Instr(科目名称, '\') - len(Right(科目名称, Instr(科目名称, '\')))))), 0)))
from {表A} Where 科目名称 is not null
这组代码是截除最后一个级别,我要的是级别小于或等于二级的。
[此贴子已经被作者于2012-11-14 6:16:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/14 12:00:00 [显示全部帖子]

换了个科目编号,用科编号,不知有没有帮助。


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/14 12:28:00 [显示全部帖子]

以下是引用lin_hailun在2012-11-14 12:10:00的发言:
 固定的 4位 2位 2位 2位 2位 吗?

 统计的只是前两级吗?

是的,如统计前两级或三级。请教如何统计?


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/14 14:12:00 [显示全部帖子]

以下是引用lin_hailun在2012-11-14 14:00:00的发言:
 用编号简单,但是如果要确定银行,同样麻烦。

select 科目编号, sum(金额) as 金额 from (select 金额, mid(科目编号, 1, iif(len(科目编号)>=6, 6, 4)) As 科目编号 from {表A}) group by 科目编号

谢谢。这个好,如何能把科目名称加进去就完美了。

[此贴子已经被作者于2012-11-14 14:13:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/14 15:43:00 [显示全部帖子]

以下是引用lin_hailun在2012-11-14 15:34:00的发言:
 截取银行的统计,但代价不是一般的大,楼主,三思哦。

select 科目名称, sum(金额) as 金额 from
(select
iif(Instr(科目名称, '\') = 0, left(科目名称, len(科目名称)), iif(InStr(Right(科目名称, cint(Len(科目名称) - Instr(科目名称, '\'))), '\') = 0,
left(科目名称, len(科目名称)), left(科目名称, cint(Instr(科目名称, '\') + InStr(Right(科目名称, cint(Len(科目名称) - Instr(科目名称, '\'))), '\') - 1)))) As 科目名称, 金额
from {表A})
group by 科目名称

这个直接,代价是太大了。但达到目的,也不错的。


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6875 积分:43518 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/11/15 21:29:00 [显示全部帖子]

以下是引用lin_hailun在2012-11-14 14:00:00的发言:
 用编号简单,但是如果要确定银行,同样麻烦。

select 科目编号, sum(金额) as 金额 from (select 金额, mid(科目编号, 1, iif(len(科目编号)>=6, 6, 4)) As 科目编号 from {表A}) group by 科目编号

改成SQL作为数据源,代码改为如下,提示有语法错误。

select 科目编号, sum(金额) as 金额 from (select 金额, substring(科目编号, 1, case when len(科目编号)>=6 then 6 else 4 end) As 科目编号 from {表A}) group by 科目编号


 回到顶部
总数 16 1 2 下一页