sql rollup解决责任人收支余额
问题的提出是周聪之前问过我的项目往来查询,不好在NC上一次性查询到。然后我就搞了一个很长的项目对账,发布了NC的节点。
现在我做了总二的总账,每次领导问我项目还有多少钱,收了多少付了多少,我还要通过科目余额表查询,但是悲剧的是工程施工必须剔除月末配比的暂估,给13打电话,
她也说NC没有法子查询一级科目然后还去掉某一个末级。
查询结果出来之后,我想对一级科目做一个汇总,实现下图的效果

sql外面嵌套了一层,因为发现虽然第一层有了wm_concat,可是使用rollup根本无用,后来发现使用rollup看来必须要对数字列进行聚合sum
select valuecode, valuename,explanation,km,dispname,sum(借方),sum(贷方),yearv,
periodv ,
no from (
select wmsys.wm_concat(gl_freevalue.valuecode) valuecode,
wmsys.wm_concat(gl_freevalue.valuename) valuename,
gl_detail.explanation,
substr(bd_accsubj.dispname,1,4) km,
bd_accsubj.dispname,
gl_detail.debitamount 借方,
gl_detail.creditamount 贷方,
gl_detail.yearv,
gl_detail.periodv ,
gl_voucher.no
from bd_accsubj
join gl_detail
on gl_detail.pk_accsubj = bd_accsubj.pk_accsubj
join bd_glorgbook
on bd_glorgbook.pk_glorgbook = bd_accsubj.pk_glorgbook
join gl_voucher
on gl_detail.pk_voucher = gl_voucher.pk_voucher
left join gl_freevalue
on gl_detail.assid = gl_freevalue.freevalueid
where gl_detail.dr = ''
and gl_detail.yearv>=2014
and gl_detail.pk_systemv!='TR'--去掉年末的结转凭证
and gl_detail.periodv<>'' --去掉期初
and bd_accsubj.subjcode not in('','','','','','','')--去掉月末配比和交税的所得税
and bd_glorgbook.glorgbookcode = '015201-0001'--公司条件
and gl_freevalue.valuecode like '015211%' --项目责任人条件
group by gl_detail.explanation,
bd_accsubj.dispname,
gl_detail.yearv,
gl_detail.periodv,
gl_voucher.no,
gl_detail.creditamount,
gl_detail.debitamount)
group by valuecode, valuename ,km, rollup((explanation,dispname,yearv,periodv,no))
order by valuecode,dispname, yearv, periodv ,no

昨天晚上再次想到一个问题,完全可以不用考虑wm_concat了,因为where条件的valuecode直接限制了工程项目而没有了“部门档案”
这样一来,sql可以这样
select gl_freevalue.valuecode,
gl_freevalue.valuename,
gl_detail.explanation,
substr(bd_accsubj.dispname,1,4) km,
nvl(bd_accsubj.dispname,'小计') 科目,
-- gl_detail.debitamount,
--gl_detail.creditamount,
sum(gl_detail.debitamount) 支出,
sum(gl_detail.creditamount) 收入,
gl_detail.yearv||'-'||gl_detail.periodv 期间,
gl_voucher.no
from bd_accsubj
join gl_detail
on gl_detail.pk_accsubj = bd_accsubj.pk_accsubj
join bd_glorgbook
on bd_glorgbook.pk_glorgbook = bd_accsubj.pk_glorgbook
join gl_voucher
on gl_detail.pk_voucher = gl_voucher.pk_voucher
left join gl_freevalue
on gl_detail.assid = gl_freevalue.freevalueid
where gl_detail.dr = ''
and gl_detail.yearv=2014
and gl_detail.pk_systemv!='TR'--去掉年末的结转凭证
and gl_detail.periodv<>'' --去掉期初
and bd_accsubj.subjcode not in
('','','','','','','')--去掉月末配比和交税的所得税
and bd_glorgbook.glorgbookcode = '015201-0001'--公司条件
and gl_freevalue.valuecode like '015211%' --项目责任人条件
group by substr(bd_accsubj.dispname,1,4),
rollup((gl_freevalue.valuecode,
gl_freevalue.valuename,
gl_detail.explanation,
bd_accsubj.dispname,
gl_detail.yearv,
gl_detail.periodv,
gl_voucher.no ))
order by substr(bd_accsubj.dispname,1,4),gl_freevalue.valuecode,yearv, periodv ,no
通过这个sql对rollup有了进一步的理解,group by rollup中前面的group by要的是根据什么组求和的,就像这里的取前四位的一级会计科目2123 4104,然后后面的就是正常的使用group 必须要写的东西。
之前的小计都是在最后面,最终发现还是order by的问题,排序第一个需要是group by后面的东西才能让小计分组在后面而不是都跑在最后面

分组小计的rollup继续的例子

sql rollup解决责任人收支余额的更多相关文章
- SQL Server解决孤立用户浅析
孤立用户概念 所谓孤立用户即指在服务器实例上未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例. 这样的用户被称为此服务器实例上的数据库的"孤立用 ...
- (转载)sql语句解决分页问题
<来源网址:http://www.delphifans.com/infoview/Article_353.html>sql语句解决分页问题日期:2005年1月17日 作者:treemon2 ...
- Error Code: 1064 – You have an error in your SQL syntax解决几个方法
本文转自 http://www.anyiwa.com/?p=1066 Error Code: 1064 – You have an error in your SQL syntax解决几个方法 十一月 ...
- mybatis用logback日志不显示sql的解决办法
mybatis用logback日志不显示sql的解决方法 1.mybatis-config.xml的设定 关于logimpl的设定值还不支持logback,如果用SLF4J是不好用的. 这是官方文档的 ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- java.sql.Connection解决插入数据库中文乱码问题
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public clas ...
- SQL锁死解决办法
SQL Server 表,记录 死锁解决办法 1. 先根据以下语句 查询 哪些表被 死锁,及 死锁的 spid SELECT request_session_id spid,OBJECT_NAME(r ...
- SQL:无法解决 equal to 操作的排序规则冲突。
更改存储过程的时候,在SQL中出现了 “无法解决 equal to 操作的排序规则冲突”错误,网上搜之,发现是表之间元素创建时排序规则不同(一个是collate Chinese_PRC_CI_AI_W ...
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...
随机推荐
- python 多线程和多核
昨天在一个群里面遇到的,使用py做计算,只有1个CPU在跑任务,其它的怠工. 在py3以后,提供了:concurrent.futures mark 如下; 官方文档: 16.6. multiproce ...
- WebView注入Java对象注意事项
在android4.2以前,注入步骤如下: webview.getSetting().setJavaScriptEnable(true); class JsObject { public String ...
- [转]Java 8:不要再用循环了
以下内容为转载,没有在jdk8中测试,具体业务场景是否存在BUG或使用需要注意的地方有待测试. ------------------分割线---------------------- 正如我之前所写的 ...
- WCF初探-2:手动实现WCF程序
1.前言 上一篇,我们通过VS自带的模板引擎自动生成了一个wcf程序,接下来我们将手动实现一个wcf程序.由于应用程序开发中一般都会涉及到大量的增删改查业务,所以这个程序将简单演示如何在wcf中构建简 ...
- 用jQuery Mobile搭建一个简单的手机页面
1.新增html页面. 2.声明html5Document. 3.载入jQuery Mobile Css.jQuery与jQuery Mobile链接库. 4.使用jQuery Mobile定义的ht ...
- sql Sever的存储过程转换为mysql的
总体来说,sql sever和Mysql的存储过程的思路都是一样的,但是在语法和结构上还是有很大的区别的.1. 在mysql中写存储过程所有的dbo都要去掉.2. 每一个sql语句后面都需要加上:否则 ...
- 【BZOJ】2719 银河之星
可以将棋子分为9种类型.且可以通过合并使得两个不同种类棋子转换为另一种棋子(不过要注意棋盘大小,有的时候硬要合并会到棋盘外面,可以先把棋盘全部转换,然后枚举每一个棋子的转换).然后把状态压成一个十位的 ...
- POJ 3216 最小路径覆盖+floyd
Repairing Company Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 6646 Accepted: 178 ...
- GFT_News Auto
using AnfleCrawler.Common; using Newtonsoft.Json.Linq; using System; using System.Collections.Generi ...
- cas 在.net 下的单点登录实现及 ,Net Mvc的接入
最近在研究单点登录,发现用的最广的就是cas了,查了下资料,发现有人写了详细的说明 地址:http://www.cnblogs.com/zhenyulu/archive/2013/01/22/2870 ...