数据库:MS SQL Server 2005
1、用SQL语句查询以后,返回不存在的值,用0代替。
基本业务是这样的:我需要统计历年和今年的数据,这个项目是从今年开始的,不可能存在历年的数据,但是这一列必须显示出来,没有数据用0代替。
目前的情况:
要达到的结果:
最开始我是用isnull(field1,0)判断直接取0,结果返回记录为空,然后,用case when field1='' then 0,还是什么结果都没有。于是百度。搜到了一篇,终于解决我的问题了。
地址:http://www.myexception.cn/sql-server/1079534.html
具体解决代码如下:
SELECT '历史' AS field1, field1 AS field2, field2 AS field3, field3 AS field4, field4 AS field5, field5 AS field6, field6 AS field7, field7 AS field8, field8 AS field9 FROM yearPramAndConView WHERE field1 <> year(getDate()) union all SELECT '历史' AS field1, 0 AS field2, 0 AS field3, 0 AS field4, 0 AS field5, 0 AS field6, 0 AS field7, 0 AS field8, 0 AS field9 FROM yearPramAndConView where NOT EXISTS(SELECT 1 FROM yearPramAndConView WHERE field1 <>year(getDate()))
解释一下:union all前面的SQL查询出来的结果是不存在的,也就是图1那样,没有结果。union all后面那一段是进行判断,判断当前条件下yearPramAndConView中是否有数据,如果没有数据(NOT EXISTS)就union all后面这个用0代替的数据。如果有数据,这个条件就不成立了,也就不会再union all了。
最后的结果是:
这个问题要是放在页面或后台处理很简单,但我这个必须用SQL处理。
基本页面时这样子的:
我需要根据“时间范围”查询不同的结果,譬如说点击“今年”的“合同”时得查询今年的合同,点击“本周”的得显示本周的。
网上说where后面可以跟case when,根据指定的条件进行判断,基本格式是:
where field1= case when <M1>=1 then 1 when <M1>=2 then 2 ...... end
其中<M1>是参数。
这个方法我这儿不适用,因为我的查询条件是变动的,用case when 来表示就是:
where case when <M1>=1 then field1 is not null when <M2>=2 then field1 is not null and field2 is not null ...... en
这种结构执行起来是会报错的。
后来在网上看到一个类似的问题,说用Or可以解决问题,果然不错。
这是参考地址:
http://zhidao.baidu.com/link?url=wyBsJX5DiPGdUNrwq9Col8NR8cbU9HsFchkZ7PucVr82eN8y6qc2tjrErBwAKael_zHZrWB2jNtpV8IXf45Z7K
最后的解决方法:
('<M1>'='今年' and year(field46)=year(GETDATE()) ) OR ('<M1>'='上周' and (DATEDIFF(week,field46,getDate())=1)) OR ('<M1>'='本周' and (DATEDIFF(week,field46,getDate())=0)) OR ('<M1>'='累计' and field46 is not null)
是不是很简单!?
3、SQL里面的相除问题
如果用简单的/相除得到的只是整数,根本就拿不到指定的小数位。这里引用一下人家的:
参考地址1:http://blog.csdn.net/lanqiao825/article/details/6227859
--SQL中的相除 SELECT CASE WHEN ISNULL(A+B,0)<>0 THEN LTRIM(CONVERT(DEC(18,2),A*100.0/(A+B)))+'%' ELSE '' END AS '百分数' FROM TB --百分比的不同格式 select LTRIM(CONVERT(DEC(18,2),42*100.0/96))+'%' AS '百分数string' ,--DEC=decimal CONVERT(decimal(10,2),42*100.0/96) AS '百分数dec', --100 与 100.0是不一样的 CONVERT(decimal(10,2),42*100/96) AS '没有保留到小数点' --from Tb order by 百分数dec desc --43.75% 43.75 43.00 --方法二: Select (Convert(varchar(50),Round(42*100.0/96,3))+'%') as 百分比 --from A --43.750000%
参考地址2:http://guiqingfeng.blog.163.com/blog/static/123357420082150115879/
--两个数中任意一个转换为浮点数后,整型的就会转换为浮点数再进行运算 select cast cast ( 165*100 as float )/343 select str((4*100.0)/(20*1.0),5,2) select str((165*100.0)/(343*1.0),5,2) --如果要保留固定小数位,使用 cast(xxxxxx,10,2) 的形式整理结果。
相关推荐
本文将详细介绍如何通过优化SQL语句来提高查询效率,特别关注那些能让索引等机制更高效地发挥作用的方法。 #### 二、避免全表扫描 全表扫描是指数据库遍历整个表来查找符合特定条件的数据记录,这种方式通常效率...
例如,若有一个`Student`表,包含了学生的学号(Sno)、姓名(Sname)、所在系(Sdept)等信息,以下SQL语句可以用来查询学生的学号和姓名: ```sql SELECT Sno, Sname FROM Student; ``` 这里的`SELECT`语句指定...
### SQL语句完全优化 在IT领域,特别是数据库管理和应用开发方面,SQL(Structured Query Language)作为一门标准语言被广泛应用于各种数据库系统中。而针对Oracle数据库,如何编写出不仅功能强大而且性能卓越的SQL...
本文档是关于SQL语句的教程,主要涵盖了SQL基础语法、数据查询、数据处理、数据操作、进阶SQL语句等知识点。为了方便理解和操作,本文档按逻辑顺序介绍了各个知识点,并举例说明了它们在实际情况中的应用。 在开始...
### 数据库 SQL 查询语句详解 #### 一、SQL 查询语句概述 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。SQL 查询语句是其中最常用的一部分,主要用于从数据库中检索数据。一个基本的 SQL ...
### SQL语句优化数据库Java #### 标题与描述中的知识点概述 在标题“SQL语句优化数据库Java”中,我们可以看出文章主要讨论的是如何通过优化SQL语句来提高数据库性能,尤其是对于Java应用程序而言。描述部分则...
在数据库管理中,编写高效的SQL语句是至关重要的,它能直接影响到数据查询速度、系统性能以及资源消耗。本文将深入探讨如何编写高效SQL语句,主要包括以下几个方面: 1. **选择合适的索引** - 索引是提高查询速度...
在数据库管理中,SQL语句的优化是提升系统性能的关键环节。执行计划是数据库解析SQL语句后生成的一种详细步骤,它展示了数据是如何被检索、排序、连接等操作的。通过对执行计划的深入理解,我们可以识别出SQL语句的...
SQL语句优化是数据库管理中的核心技能之一,它关乎到系统的性能、响应时间和资源利用率。在处理大量数据时,有效的SQL优化策略能显著提升数据库应用的效率。以下是对SQL语句优化技术的详细分析: 一、理解执行计划 ...
推荐方案:用其它相同功能的操作运算代替,如 a is not null 改为 a>0 或 a>’’ 等。建立位图索引(有分区的表不能建,位图索引比较难控制,如字段值太多索引会使性能下降,多人更新操作会增加数据块锁的现象)。 ...
优化此类查询可以使用范围查询(如"Student_Id>=’2003’ANDStudent_Id<’2004’")来代替。同样,使用非法操作符如"0"或者对列进行算术运算、函数运算、列与列之间的比较等,都会导致查询无法被优化器优化。 使用...
优化SQL语句能够显著提高查询速度,减少服务器负载,提升系统整体效率。以下是一些关于SQL语句优化的重要知识点: 1. **选择最有效的表名顺序**:在FROM子句中,应将记录最少的表放在最前面,因为在基于规则的优化...
- 可以考虑使用`COUNT(column)`代替`COUNT(*)`,如果该列不包含NULL值,则效果相似但性能更优。 - 对于简单的计数需求,考虑直接使用聚合函数或者子查询来替代复杂的`COUNT(*)`操作。 ### 4. 避免使用或!= - **...
【通用SQL数据库查询语句精华使用简介】 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言,用于查询、插入、更新和删除数据。本简介主要针对初学者,讲解了简单的SQL查询语句的核心组成部分。...
了解并熟练掌握这些基础SQL语句及其扩展概念,对于数据查询、分析和管理至关重要。无论是在开发、数据分析还是运维中,SQL都是IT从业者必备的技能之一。通过不断的实践和学习,可以进一步提升在数据库管理方面的专业...
例如,在查询用户状态时,可以直接使用`DECODE`函数根据`lockdate`字段的值返回“锁定”或“未锁定”的状态,避免了额外的条件分支判断。 #### 七、整合无关联数据库访问 对于多个简单且无关联的数据库查询,可以...
- 共享SQL:Oracle的Shared Pool存储SQL语句,新的SQL会在这里寻找是否存在相同的语句以避免解析和硬解析。 - 绑定变量:如果SQL包含绑定变量,这个阶段会为SQL附上实际值。 - 并行处理:对于需要并行执行的SQL,会...
- 查询语句的结构:避免使用全表扫描,减少不必要的列选择,使用连接(JOIN)代替子查询等。 - 数据库设计:合理地进行数据库设计,包括表的规范化、适当的分解等,可以减少数据冗余和提高查询效率。 - 系统配置:...
1. **尽量避免使用复杂的子查询**:过多的嵌套会导致SQL语句难以理解和维护。 2. **考虑性能因素**:对于大数据量的操作,优先考虑连接查询而非子查询。 3. **优化子查询**:确保子查询能够快速执行,比如通过索引...