- 浏览: 1882707 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
SQL的分段统计查询语句
我们在数据的查询中经常会遇到这样的情况,查询每个月的记录的数量,而在数据库中并没有存在这样的字段,只是有一个日期的字段。例如下面的简单数据库:
--创建测试表test1
create table test1
(
id int identity(1,1),--编号,自动生成
name varchar(10),--记录名称
dates datetime--记录时间
)
我们假设有如下的记录:
ID NAME DATES
1 测试1 2007-12-20
2 测试2 2007-12-21
3 测试3 2007-12-22
4 测试4 2007-11-20
5 测试5 2007-11-21
6 测试6 2007-11-22
7 测试7 2007-10-20
我们想实现这样的效果:
年度 1月份 2月份 3月份 4月份 5月份 6月份 7月份 8月份 9月份 10月份 11月份 12月份
2007 0 0 0 0 0 0 0 0 0 1 0 0
2007 0 0 0 0 0 0 0 0 0 0 3 0
2007 0 0 0 0 0 0 0 0 0 0 0 3
我们可以这样来写SQL语句
select years as 年度,
case when months=1 then counts else 0 end 1月份 ,
case when months=2 then counts else 0 end 2月份 ,
case when months=3 then counts else 0 end 3月份 ,
case when months=4 then counts else 0 end 4月份 ,
case when months=5 then counts else 0 end 5月份 ,
case when months=6 then counts else 0 end 6月份 ,
case when months=7 then counts else 0 end 7月份 ,
case when months=8 then counts else 0 end 8月份 ,
case when months=9 then counts else 0 end 9月份 ,
case when months=10 then counts else 0 end 10月份 ,
case when months=11 then counts else 0 end 11月份 ,
case when months=12 then counts else 0 end 12月份
from
(
select year(dates) as years,month(dates) s,count(name)as counts
from test1 group by year(dates),month(dates)
) as test2
这样就可以达到我们想要的效果了。
看了上面的内容,下面来说一下原理,其实很简单的。首先,我们要找出数据库中每年每个月的记录的个数,那么,需要使用函数进行分组统计,分组的条件当然是年份和月份,所以还要使用时间函数,因此我们写出如下的SQL语句:
select year(dates) as years,month(dates) s,count(name)as counts
from test1 group by year(dates),month(dates)
这样,我们就可以把各年各月的记录的个数,统计出来了,怎样显示成我们需要的样式呢?使用case when来解决这个问题。
语法 CASE WHEN exrp1 THEN exrp2 [ELSE exrp3] END
其中,
exrp1为条件,我们这里是想把各个月份的数据都统计出来,那么首先我们要找到月份为1的数据,然后找到月份为2的数据,....以此类推,所以,我们要写 months=1,months=2,....
exrp2 为符合条件时显示的数据,则,如果月份为1,则显示1月份的数据counts
exrp3 为可选参数,当条件不成立时,显示的数据,如果此处不写,那么当条件不成立时,数据值为NULL。
这样我们就可以把各个月份的数据统计出来了。最后不要忘记起别名,将以上的内容进行总结,则得到我们前面给出的SQL语句了
我们在数据的查询中经常会遇到这样的情况,查询每个月的记录的数量,而在数据库中并没有存在这样的字段,只是有一个日期的字段。例如下面的简单数据库:
--创建测试表test1
create table test1
(
id int identity(1,1),--编号,自动生成
name varchar(10),--记录名称
dates datetime--记录时间
)
我们假设有如下的记录:
ID NAME DATES
1 测试1 2007-12-20
2 测试2 2007-12-21
3 测试3 2007-12-22
4 测试4 2007-11-20
5 测试5 2007-11-21
6 测试6 2007-11-22
7 测试7 2007-10-20
我们想实现这样的效果:
年度 1月份 2月份 3月份 4月份 5月份 6月份 7月份 8月份 9月份 10月份 11月份 12月份
2007 0 0 0 0 0 0 0 0 0 1 0 0
2007 0 0 0 0 0 0 0 0 0 0 3 0
2007 0 0 0 0 0 0 0 0 0 0 0 3
我们可以这样来写SQL语句
select years as 年度,
case when months=1 then counts else 0 end 1月份 ,
case when months=2 then counts else 0 end 2月份 ,
case when months=3 then counts else 0 end 3月份 ,
case when months=4 then counts else 0 end 4月份 ,
case when months=5 then counts else 0 end 5月份 ,
case when months=6 then counts else 0 end 6月份 ,
case when months=7 then counts else 0 end 7月份 ,
case when months=8 then counts else 0 end 8月份 ,
case when months=9 then counts else 0 end 9月份 ,
case when months=10 then counts else 0 end 10月份 ,
case when months=11 then counts else 0 end 11月份 ,
case when months=12 then counts else 0 end 12月份
from
(
select year(dates) as years,month(dates) s,count(name)as counts
from test1 group by year(dates),month(dates)
) as test2
这样就可以达到我们想要的效果了。
看了上面的内容,下面来说一下原理,其实很简单的。首先,我们要找出数据库中每年每个月的记录的个数,那么,需要使用函数进行分组统计,分组的条件当然是年份和月份,所以还要使用时间函数,因此我们写出如下的SQL语句:
select year(dates) as years,month(dates) s,count(name)as counts
from test1 group by year(dates),month(dates)
这样,我们就可以把各年各月的记录的个数,统计出来了,怎样显示成我们需要的样式呢?使用case when来解决这个问题。
语法 CASE WHEN exrp1 THEN exrp2 [ELSE exrp3] END
其中,
exrp1为条件,我们这里是想把各个月份的数据都统计出来,那么首先我们要找到月份为1的数据,然后找到月份为2的数据,....以此类推,所以,我们要写 months=1,months=2,....
exrp2 为符合条件时显示的数据,则,如果月份为1,则显示1月份的数据counts
exrp3 为可选参数,当条件不成立时,显示的数据,如果此处不写,那么当条件不成立时,数据值为NULL。
这样我们就可以把各个月份的数据统计出来了。最后不要忘记起别名,将以上的内容进行总结,则得到我们前面给出的SQL语句了
发表评论
-
ORACLE中使用递归查询 (
2012-12-27 16:35 978在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的 ... -
函数与存储过程区别
2011-06-01 18:17 1319本质上没区别。只是 ... -
SQL Server2000安装常见问题
2011-05-25 14:15 1494一:解决安装sql时文件挂起的问题: (1)、点击“开始》运 ... -
MySQL语句优化的原则
2011-04-12 14:21 9991、使用索引来更快 ... -
转SQL-group by学习
2011-04-12 14:18 1272在select 语句中可以使用group by 子句将行划分成 ... -
SQL Select语句完整的执行顺序:
2011-04-12 14:15 1401SQL Select语句完整的执行顺序: 1、from子句组 ... -
SQL截取字符串(substring与patindex的使用)
2011-03-31 13:55 5714SQL截取字符串(substring与patinde ... -
SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL
2011-03-16 09:21 1315先看下面一个嵌套的查 ... -
SQL CHARINDEX (Transact-SQL)
2010-12-06 09:05 1480返回字符串中指定表达式的开始位置。 Transact-SQ ... -
SQL Server基本函数
2010-12-06 08:53 1611SQL Server基本函数 1.字符串函数 : ... -
SQL2005级联删除,层叠,设置空,设置默认值
2010-12-01 15:46 2450浅谈SQL SERVER 2005 之引用 ... -
sql 显示插入主键
2010-10-22 16:28 1309set identity_insert [T_ADMINTYP ... -
取小数
2010-10-22 16:12 1306使用这个方式来计算 SELECT convert(decima ... -
oracle 创建表空间
2010-10-12 11:28 1534一.创建表空间 CREATE SMALLFILE TABLES ... -
sql 约束大全
2010-09-27 16:28 1367--------添加主键约束(bookid作为主键) alt ... -
sql 主外键语法
2010-09-27 08:39 1741alter table dbo.t_commAtta ... -
在SQL Server中,关于with as使用介绍
2010-09-26 13:32 36092一.WITH AS的含义 ... -
procedure 存储过程多个返回测试
2010-09-01 10:26 1188create procedure test(@temp1 va ... -
sql 实现按月份,季度统计报表
2010-08-30 12:01 14971呵呵,我们在处理设计到日期统计时候经常会按照年度,季度,月份统 ... -
SQL Server DATEPART() 不能言
2010-08-30 11:29 1826今天做按月份,按年度,按季度统计报表,后来发现了最简单最可扩展 ...
相关推荐
在“sql语句大全 分段详细讲解了很多语句的实例用法”这个资源中,我们可以期待深入理解SQL的核心概念和常见用法。 1. **SELECT语句**:这是SQL中最基本的查询语句,用于从数据库中检索数据。你可以根据需求选择...
在处理大量数据时,经常需要对数据进行分段统计,以便更好地理解和分析数据分布情况。本篇将通过一个具体的示例来介绍如何使用PostgreSQL中的`CASE WHEN`语句结合`SUM`聚合函数实现区间或分数段统计,并且无需创建...
文档标题“SQL和VBA技术在气体分段计量中的应用.pdf”和描述中指出了本篇文献的主题,即探讨如何在气体分段计量系统中应用SQL(结构化查询语言)和VBA(Visual Basic for Applications)这两种技术。文档的主要目的...
│ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例.sql │ │ 5.4.4 缺勤天数统计的处理示例.sql │ │ │ └...
以下是查询当天数据的SQL语句示例: ```sql SELECT * FROM `table` WHERE DATE(时间字段) = CURDATE(); ``` 这条语句将返回时间字段完全匹配当前日期的所有记录。 2. 查询当月数据: 如果需要查询当月的数据,...
在SELECT语句中,字段名还可以结合使用SQL函数,如COUNT、MIN和MAX等,来进行更复杂的数据统计和计算。 在使用Oracle SQL时,应注意以下几点: - 确保操作的记录范围合理,避免一次性操作过多记录导致事务过大,...
学号.sql │ 开票统计--涉及到连号处理.sql │ 新编号查询示例(分类查询).sql │ 新编号查询示例.sql │ 日期流水号.sql │ 材料流水号.sql │ 流水号.sql │ 箱编号连号处理.sql ...
以统计管子材料为例,可以使用SQL语句,结合商品代码、管径、商品描述和长度等信息,对焊接管和法兰管进行区分统计。例如,可以查询某个分区的焊接管,通过JOIN操作连接不同表格,计算管子的总长度。SQL查询提供了...
《SQL经典编程》一书专注于教授SQL语言的运用,旨在帮助程序员高效地撰写SQL语句,从而提升数据处理能力。SQL(Structured Query Language),结构化查询语言,是用于管理关系数据库的标准语言,无论是在Web应用、...
7. 子查询:介绍如何在SQL语句中嵌套查询,以满足更复杂的查询需求。 8. 分区和分段:Oracle9i引入了分区技术,可以提高大型表的查询性能。这部分会解释如何创建和管理分区表。 9. PL/SQL:PL/SQL是Oracle的内置...
1. **SQL优化**:SQL查询是数据库操作的基础,优化SQL语句能显著提高数据库性能。这包括避免全表扫描,使用恰当的连接类型(如内连接、外连接),减少子查询,利用WHERE子句过滤不必要的数据,以及合理使用聚合函数...
本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...
例如,按英语成绩分段统计学生数量: ```sql SELECT english, COUNT(*) AS '学生数量' FROM Score GROUP BY english HAVING english >= 60 ``` 11. **WITH(CTE)**: 公共表表达式(CTE)提供临时的结果集...
在SQL查询中实现阶梯式累加,即根据特定条件对数据进行分段累加,是一种常见的需求。本篇文章将详细介绍如何通过SQL语句实现这种累加方式,并通过具体的例子来说明其应用场景及实现过程。 #### 1. 阶梯式累加的概念...
分卷导出的思路是通过统计SQL语句的长度,以字符为单位进行计算,当长度超过预设的分卷大小(例如1MB)时,将当前的SQL语句写入一个新的文件。这种方法是为了确保每个备份文件不会过大,方便管理和恢复。然而,这种...
除了SQL语句执行过程的优化之外,多表联结和子查询也是常见的性能瓶颈。下面分别介绍这两种情况下的优化策略。 **3.1 多表联结优化** 多表联结在复杂查询中非常常见,但不恰当的联结策略会导致性能问题。为了提高...
12. **性能调优**:包括查询优化、索引策略、统计信息收集和SQL Trace工具的使用。 13. **备份与恢复**:涉及数据备份、增量备份、逻辑备份和恢复策略。 14. **XML支持**:Oracle 10g提供了对XML数据的内置支持,...
Oracle SQL 优化是数据库管理中的重要环节,它涉及到如何高效地执行SQL查询,减少资源消耗,提高系统性能。本文将围绕“Oracle SQL 优化”这一主题,深入探讨相关的知识点。 一、理解SQL执行过程 在Oracle数据库中...
在SQL中,数字字典通常指的是存储关于数据库中数字列的信息,如最大值、最小值、平均值等统计信息。这些信息对于数据分析、性能优化和查询设计都非常有用。以下是一些关于SQL数字处理的关键知识点: 1. **数值类型*...
5. **SQL语句重写**:通过优化器或手动调整SQL语句,如避免全表扫描,使用JOIN代替子查询,或者使用连接运算优化多表查询,都是常见的优化手段。 6. **统计信息收集**:准确的统计信息有助于优化器做出更好的执行...