查出数据库各种类型的金额,汇总(SQL语句编写的艺术)

本实例是在做小项目的时候用到的,想分享给大家,虽然简单,但可能对大家有用。!!!

实例:记账系统

一:

数据库: 流水记录,记录的消费类型有很多。如下图:通过typeId字段可以知道类型。(当然这里还有一张消费类型表哦)

二:sql语句查询

说明:主要是case语句的运用,根据不同情况,对不同的值进行sum运算得到我们想要的结果!

1     public List getSQLqueryColumnList(String sql)
2     {
3         List l=getSession().createSQLQuery(sql).list();
4         return l;
5
6     }

baseDao是我各种基础数据库操作的函数,大家可以自行构建,其实主要是用上面的函数.

如果用的是hibernate  可以拿到sessionFactory  sessionFactory.

SessionFactory.getCurrentSession() 得到session,再操作,即上述函数。

 1  //查出各种钱钱钱钱钱钱钱的汇总!
 2           String Moneysql="select  sum(case when typeid=1  then  money else 0 end ) as cateen,"+
 3                 "sum(case when typeid=2  then  money else 0 end ) as car,"+
 4                 "sum(case when typeid=3  then  money else 0 end ) as entertainment,"+
 5                 "sum(case when typeid=4  then  money else 0 end ) as office,"+
 6                 "sum(case when typeid=5  then  money else 0 end ) as accommodation,"+
 7                 "sum(case when typeid=6  then  money else 0 end ) as traffic,"+
 8                 "sum(case when typeid=7  then  money else 0 end ) as service,"+
 9                 "sum(case when typeid=8  then  money else 0 end ) as gift,"+
10                 "sum(case when typeid=9  then  money else 0 end ) as training,"+
11                 "sum(case when typeid=10  then  money else 0 end ) as othermoney,"+
12                 "sum(money) as totalmoney "+
13                 "from db_workinfo.tb_daily_account where rigisteruser=‘wuhuanbin‘ and id between 2 and 30";
14
15         List listForMoney=baseDao.getSQLqueryColumnList(Moneysql);
16
17         Iterator moneyIterator=listForMoney.iterator();
18         Object[] o=(Object[])moneyIterator.next();
19         System.out.println("餐饮"+o[0]);
20         System.out.println("车辆使用 "+o[1]);
21         System.out.println("项目娱乐 "+o[2]);
22         System.out.println("办公设备 "+o[3]);
23         System.out.println("住宿fe费 "+o[4]);
24         System.out.println("交通费 "+o[5]);
25         System.out.println("服务费 "+o[6]);
26         System.out.println("礼品费 "+o[7]);
27         System.out.println("培训费 "+o[8]);
28         System.out.println("其他费 "+o[9]);
29
30         System.out.println("总de费用: "+o[10]);
//查的是流水表,根据是消费类型ID哦!
时间: 2024-08-28 23:10:21

查出数据库各种类型的金额,汇总(SQL语句编写的艺术)的相关文章

《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件

<万能数据库查询分析器>实现使用SQL语句直接高效地访问文本文件 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要    用SQL语句来直接访问文本文件?是在做梦吗? 本文详细地介绍了"万能数据库查询分析器",中文版本<DB 查询分析器>.英文版本<DB Query Analyzer>在 文本文件处理方面非常强大的功能,你可以直接用SQL语句来访问这些文本文件,访问250万条记录的文件的复杂的关联操作,也不过用时59秒钟.需要注意

SQL学习笔记之数据库专题(一):SQL语句详解

SQL是用来存取关系数据库的语言,具有查询.操纵.定义和控制关系型数据库的四方面功能.常见的关系数据库有Oracle,SQLServer,DB2,Sybase.开源不收费的有MYSQL,SQLLite等.今天我们主要以MYSQL为例子,讲解SQL常用的SQL语句. 一.数据库 1.创建数据库 create database [if not exists] db_name [character set xxx] [collate xxx] *创建一个名称为freedom的数据库. create d

MySql数据库3【优化2】sql语句的优化

1.SELECT语句优化 1).利用LIMIT 1取得唯一行[控制结果集的行数] 有时,当你要查询一张表是,你知道自己只需要看一行.你可能会去的一条十分独特的记录,或者只是刚好检查了任何存在的记录数,他们都满足了你的WHERE子句.在这种情况下,增加一个LIMIT 1会令你的查询更加有效.这样数据库引擎发现只有1后将停止扫描,而不是去扫描整个表或索引. 2).不要使用BY RAND()命令 这是一个令很多新手程序员会掉进去的陷阱.你可能不知不觉中制造了一个可怕的平静.这个陷阱在你是用BY RAN

Oracle数据库概念和一些基本的SQL语句

1.数据 定义:描述事物的符号.例如:文本.音频.视频都是数据. 2.数据库 存放数据的仓库,存放在计算机中,按照一定格式存放,可以为用户共享. 3.数据库的发展阶段 1.网状数据库 2.层次数据库 3.关系数据库(目前主流数据库) 4.对象数据库 4.NOSQL数据库 4.Oracle数据库系统用户(管理员) scott账户:测试账户,练习账户 登录方式:dos命令行---->sqlplus--->输入账户:scott--->输入密码---->(登录成功) 如果该账户被锁定,需要

SQLSERVER数据库、表的创建及SQL语句命令

SQLSERVER数据库,安装.备份.还原等问题: 一.存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1.卸载原来的sql server 2000.2005,然后再安装sqlserver 2008,否则经常sql server服务启动不了 2.sql server服务启动失败,解决方法: 进入sql serverconfigure manager,点开 Sql server 网络配置(非sql native client 配置),点sqlzhh(

数据库学习笔记3--基本的SQL语句

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4028178.html [正文] 主要内容: 一.cmd命令行的常用命令 二.数据定义语言(DDL) 三.数据操纵语言(DML) 四.数据查询语言(DRL) 五.事务控制语言(TCL) 一.cmd命令行的常用命令: 当我们使用MySQL 5.5 Command Line Client这个客户端登陆时

【故障处理141119】一次数据库不繁忙时一条sql语句2个运行计划导致业务超时的故障处理

1,故障描写叙述: 一条select有两个运行计划.在sqlplus中运行选择好的运行计划.仅仅要40毫秒.而在程序中运行选择了差的运行计划,要1分23秒左右,导致前台业务超时报错. 2.故障解决: 使用outline固定好的运行计划后攻克了该故障. 3,故障发展顺序: (1),早上一上班,说CRM的一个业务报错,crm应用开发者.接口的.tuxdo.dba集中到一起開始诊断错误. (2),业务返回超时错误 (3),数据库这边抓取AWR报告发现例如以下信息: (4),此时应用开发者也发过来了该条

JDBC之java数据库的连接与简单的sql语句执行

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Test { /** * @param args */ public static void main(String[] args) { /*这部分是用java驱动连接oracle数据库,驱动的jar可以自己在网上下载,也可以给我留言,发给你*/

SQLServer 2008数据库查看死锁、堵塞的SQL语句

死锁和堵塞一直是性能测试执行中关注的重点. 下面是我整理的监控sql server数据库,在性能测试过程中是否出现死锁.堵塞的SQL语句,还算比较准备,留下来备用. --每秒死锁数量 SELECT  * FROM    sys.dm_os_performance_counters  WHERE   counter_name LIKE 'Number of Deadlocksc%'; --查询当前阻塞 WITH CTE_SID ( BSID, SID, sql_handle ) AS ( SELE