以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求用SQL代码生成统计表  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=25605)

--  作者:lihe60
--  发布时间:2012/11/13 7:54:00
--  求用SQL代码生成统计表
数据库为表A,求用SQL代码生成表B和表C.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.table


--  作者:lihe60
--  发布时间:2012/11/13 8:17:00
--  

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

其他朋友也可以帮助哟。


--  作者:lin_hailun
--  发布时间:2012/11/13 9:05:00
--  
 楼主,试了一下。你这个也太啥了,不可能用一句查询语句完成的,你需要对字符处理,而且如果不仅仅是三级的话,还要用到递归。

 或者狐表来做,或者写成一个存储过程/函数来调用。上网搜一下存储过程的编写。

--  作者:sgs
--  发布时间:2012/11/13 9:37:00
--  
以下是引用lihe60在2012-11-13 7:54:00的发言:
数据库为表A,求用SQL代码生成表B和表C.

你也太纠结了吧,为什么不把数据分列显示呢


--  作者: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

--  作者: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的语句你参照这个想想先


--  作者:lihe60
--  发布时间: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编辑过]

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

表格换了一下,再请教。

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


--  作者:lihe60
--  发布时间: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编辑过]