使用SQL实现小计,合计以及排序
数据库  /  管理员 发布于 6年前   730
--说明:个人学习笔记,实现小计合计显示,分组按BANK_ID+OP_DATE升序排序
复制代码 代码如下:
--测试数据
CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))
INSERT #TB SELECT '1111','001','20121210',1234567,111.00
UNION ALL SELECT '2222','002','20121210',1234567,222.00
UNION ALL SELECT '3333','001','20121112',1234567,250.00
UNION ALL SELECT '4444','002','20121110',1234567,330.00
UNION ALL SELECT '5555','001','20121210',1234567,300.00
UNION ALL SELECT '6666','002','20121112',1234567,150.00
GO
--查询
SELECT A.ID
,A.BANK_ID
,A.AMT
,B.OP_DATE
,B.OPERATOR_NO
FROM
(
(SELECT
ID=CASE
WHEN GROUPING(BANK_ID)=1 THEN '合计'
WHEN GROUPING(ID)=1 THEN '小计'
ELSE ID END
,BANK_ID
,SUM(AMT) AMT
,ORDER_SIGN1=GROUPING(BANK_ID),ORDER_SIGN2=BANK_ID
,ORDER_SIGN3=GROUPING(ID)
FROM #TB
GROUP BY BANK_ID,ID WITH ROLLUP
HAVING GROUPING(ID)=1
UNION ALL --先得出表的统计,再加上表中的数据
SELECT ID
,BANK_ID
,AMT
,ORDER_SIGN1=0,ORDER_SIGN2=BANK_ID
,ORDER_SIGN3=0
FROM #TB) A
LEFT JOIN --为了显示出OP_DATE、OPERATOR_NO
(SELECT ID
,OP_DATE
,OPERATOR_NO
FROM #TB) B ON A.ID = B.ID
) ORDER BY ORDER_SIGN1,ORDER_SIGN2,ORDER_SIGN3,OP_DATE
GO
--删除测试
DROP TABLE #TB
/*--测试结果
ID BANK_ID AMT OP_DATE OPERATOR_NO
3333 001 250.00 20121112 1234567
5555 001 300.00 20121210 1234567
1111 001 111.00 20121210 1234567
小计 001 661.00 NULL NULL
4444 002 330.00 20121110 1234567
6666 002 150.00 20121112 1234567
2222 002 222.00 20121210 1234567
小计 002 702.00 NULL NULL
合计 NULL 1363.00 NULL NULL
--*/
test1 在
opencode + Oh-my-openagent,我的第一个免费的ai编程智能体管家:Sisyphus中评论 test..122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..Zita 在
Google AI Studio升级全栈 vibe coding体验,可直接构建带登录和数据库的应用中评论 111222..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号
