引:
为了举例说明,这里创建了一张成绩表,如下图所示:
比较:
1、sql中,这两个函数我们仅能使用case,代码及结果如下:
select name,
case Subject
when '语文' then 1
when '数学' then 2
when '英语' then 3 --else 3
end as '科目代码'
from Results
同样的,我们可以用case实现行转列,代码及结果如下:
select Name,
sum(case when Subject='语文' then Result end) '语文',
sum(case when Subject='数学' then Result end) '数学',
sum(case when Subject='英语' then Result end) '英语'
from Results
group by Name
2、但是,在oracle中,这两个函数我们都可以使用,代码及结果如下:
decode用法:select Name,decode(Subject,'语文',1,'数学',2,'英语',3) 科目代码 from results;
select Name,decode(Subject,'语文',1,'数学',2,3) 科目代码 from Results;
case用法:
select name,
case
when Subject='语文' then 1
when Subject='数学' then 2
when Subject='英语' then 3 --else 3
end as 科目代码
from Results;
这两种方法均能达到同样的结果:
同样的,我们可以使用这两个函数实现行转列,代码及结果如下:
decode:
select
Name,
sum(decode(Subject,'语文',Result,0)) 语文,
sum(decode(Subject,'数学',Result,0)) 数学,
sum(decode(Subject,'英语',Result,0)) 英语
from Results
group by Name;
case:
select
Name,
sum((case when Subject='语文' then Result else 0 end)) 语文,
sum((case when Subject='数学' then Result else 0 end)) 数学,
sum((case when Subject='英语' then Result else 0 end)) 英语
from Results
group by Name;
数据库表与行转列的中间结果(想想还是也附上)
oracle中:
select
Name,
decode(Subject,'语文',Result,0) 语文,
decode(Subject,'数学',Result,0) 数学,
decode(Subject,'英语',Result,0) 英语
from Results;
或
select
Name,
(case when Subject='语文' then Result else 0 end) 语文,
(case when Subject='数学' then Result else 0 end) 数学,
(case when Subject='英语' then Result else 0 end) 英语
from Results;
结果如下:
以上内容,不对的地方请指正。此文仅想抛砖引玉...
(续)
SQL2000中动态SQL
declare @sql varchar(8000)
set @sql = 'select name '
select @sql = @sql + ' , sum(case Subject when '+ char(39) + Subject + char(39) +' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from results) as a
set @sql = @sql + ' from results group by name'
exec(@sql)
SQL2005中动态SQL
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + Subject from Results group by Subject
set @sql = '[' + @sql + ']'
exec ('select * from Results pivot (max(result) for subject in (' + @sql + ')) b')
注:引用自 http://www.cnblogs.com/NothingIsImpossible/archive/2010/10/13/1850250.html
相关推荐
下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql DECODE(column, value1, result1, value2, result2, ..., default_result) ``` 这里`column`是要检查的...
在Oracle数据库中,将行数据转换为列数据是一种...总结来说,Oracle中的行转列操作主要依赖于`DECODE`函数和`GROUP BY`子句,以及动态SQL技术,这些工具可以帮助我们更有效地管理和展示数据,满足复杂的数据分析需求。
Oracle数据库中的`Decode()`函数和`CASE`语句都是用于条件判断和数据转换的重要工具,它们各有特点,适用场景也有所不同。以下是对这两个功能的详细比较。 首先,`Decode()`函数是一个简化的条件表达式,它允许你在...
Oracle中的Decode()函数是数据库查询时非常实用的一个工具,它允许你在SQL语句中实现简单的条件判断,类似于IF-THEN-ELSE逻辑。这个函数在处理数据时提供了灵活性,避免了复杂的CASE语句,使得代码更加简洁易读。...
- `DECODE`在Oracle中用于条件判断,SQL Server中可使用`CASE`或`IIF`表达式替代。 - `COALESCE`在Oracle和SQL Server中用于返回非NULL的第一个参数。 - `CURRVAL`和`NEXTVAL`在Oracle中处理序列,SQL Server中...
- **SELECT语句**:尽管基本语法相似,但Oracle支持特定的优化提示和集合运算符如START WITH和CONNECT BY,以及INTERSECT和MINUS,这些在Sql Server中需要通过其他方式实现,比如使用EXISTS和NOT EXISTS子句。...
在数据库管理和SQL编程中,`DECODE`函数和`CASE WHEN`语句是两种非常重要的逻辑判断工具,它们常用于处理条件分支和数据转换。在这篇文章中,我们将深入探讨这两种方法的用途、区别以及如何巧妙地运用它们。 首先,...
在 Oracle 中,通常使用 decode 或者 case 函数与聚合函数联合实现列转行功能。但是,这种方法存在一些缺陷,例如性能问题和数据重复访问问题。在本文中,我们将介绍一种新的解决方案,来解决 Oracle 列转行问题。 ...
在 Oracle 数据库中,`CASE WHEN` 表达式提供了一种在 SQL 查询中实现条件判断的方法,这使得开发人员能够在不使用 PL/SQL 的情况下编写更为灵活和复杂的查询语句。`CASE WHEN` 与 `DECODE()` 函数相似,但因其符合 ...
Oracle中的DECODE函数是一种非常实用的工具,它允许你在SQL查询中执行简单的条件判断和返回相应的值。这个函数类似于IF-THEN-ELSE语句的简写形式,减少了编写复杂逻辑的代码量,使得SQL语句更加简洁易读。 DECODE...
列转行(Pivot)和行转列(Unpivot)是两种基本操作,可以将数据按照不同的维度进行组织。传统的列转行方法通常涉及`DECODE`或`CASE`函数与聚合函数如`MAX`或`MIN`的结合,但这些方法可能在处理大量数据时对性能造成...
Oracle高级SQL学习与练习涵盖了数据库编程中的一系列高级主题,旨在帮助数据库开发者和管理员提高解决复杂问题的能力。在Oracle数据库系统中,高级SQL技能是进行高效数据管理、查询优化和复杂数据处理的基础。 1. ...
本文将深入探讨Oracle中的经典SQL查询和最常用的功能函数,帮助读者更好地理解和应用这些工具。 首先,我们关注的是SQL中的单行函数。这些函数主要用于处理单行数据,包括字符、数字、日期、转换和混合类型等,可以...
- 可以在WHERE子句中使用字符串比较(如LIKE)和日期比较(如BETWEEN)等操作符。 - **2.2.4 比较条件** - SQL支持多种比较条件,如等于(=)、不等于(!= 或 )、大于(>)、小于(<)等。 - **2.2.5 使用BETWEEN条件** ...
本文详细介绍了如何在 Oracle 数据库中实现数据的行列互换操作,分别使用了 `UNION`、`CASE` 以及 `DECODE` 函数等方法。每种方法都有其适用场景,具体选择哪种取决于实际需求和个人偏好。希望本文能够帮助你在实际...
在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...