`

行变列

阅读更多

一个SQL题目:


           有一张表timetable
                  教师号  星期号 是否有课
                      1        2      有
                      1        3      有
                      2        1      有
                      3        2      有
                      1        2      有

           写个SQL语句表这张表变成如下结构的表:
                  教师号 星期一 星期二 星期三
                     1       2      1 
                     2       1   
                     3       1
                     星期下面的数字表示:对应的教师在星期几已经排的课数.


           看到这个题目第一眼,不知道如下下手,去坛子问了,有了第一个答案:
             1,创建表:
                create table timetable(teacherno number,weekno number,course varchar2(15));
             2,插入数据:
               insert into timetable values(&teacherno,&weekno,&course);
               按提示输入需要插入的值,也可以在插入的时候直接把值写到插入语句中
             3,commit;
              本题解决方法1:
             create table test as 
                                   select teacherno as 教师号,
                                              sum(case when weekno=1 and course='有' then 1 end) as 星期一,
                                              sum(case when weekno=2 and course='有' then 1 end) as 星期二,
                                              sum(case when weekno=3 and course='有' then 1 end) as 星期三
                                   from timetable 
                                   group by  teacherno;

                   查询结果:
              SQL> select * from test;
                           教师号        星期一     星期二     星期三
                          ----------   ----------   ----------   ----------
                                1                           2             1
                                2           1
                                3                           1

               满足题目要求:这个解决方法是利用case when condition result 搜索case语句使用的相关条件来确定返回值
               这个方法是坛子里面的人告诉,同时告诉可以使用oracle 的专有函数decode来处理:
               下面的方法是我自己弄出来的,基本也能满足要求了,不过使用了两次decode,因为不晓得怎么用decode一次去比较两个条件
                 1,表及数据利旧.
                 2,SQL语句
                        create table test000  as 
                                   select    teacherno as 教师号,
                                                sum(decode(weekno,1,decode(course,'有',1))) 星期一,
                                                sum(decode(weekno,2,decode(course,'有',1))) 星期二,
                                                sum(decode(weekno,3,decode(course,'有',1))) 星期三
                                  from timetable 
                                 group by  teacherno;

                3,查询结果:
                       SQL> create table test000  as 
                                 2                select    teacherno as 教师号,
                                 3                             sum(decode(weekno,1,decode(course,'有',1))) 星期一,
                                 4                             sum(decode(weekno,2,decode(course,'有',1))) 星期二,
                                 5                             sum(decode(weekno,3,decode(course,'有',1))) 星期三
                                 6                from timetable 
                                 7                group by  teacherno;

                               Table created.
                      SQL> select * from test000;
                                        教师号     星期一     星期二     星期三
                                      ----------  ----------   ----------   ----------
                                            1                            2              1
                                            2             1
                                            3                            1

                            说明:decode 函数是oracle专有的非标准SQL中
   
                            一次记录学习的过程,达人门如有更好的方法,望不吝赐教!!
分享到:
评论

相关推荐

    Oracle 行变列实现方法

    通过oracle的管道技术实现行变列,或者复杂的SQL语句实现。 可以完成复杂逻辑在oracle中完成,减少对编程程序的依赖。

    数据显示由行变成列

    在数据分析和数据库管理中,"行转列"是一种常见的数据处理技术,它的目的是为了更好地组织和展示数据,以便于分析和理解。这个过程通常被称为"透视"或"Pivot"操作,是将表格数据重新排列,使得原来某一列的值转换为...

    Oracle行变列-存储过程

    Oracle数据库中的"行变列"技术是指将数据库中原本存储为多行的数据转换为单行的列式展示,这在数据分析、报表制作等场景中非常常见。存储过程是Oracle数据库中预编译的PL/SQL代码块,可以执行一系列复杂的数据库操作...

    数据库行变列查询 实现方法

    ### 数据库行变列查询实现方法 #### 一、引言 在数据库操作中,有时我们需要将表中的数据从行转换为列,这种操作被称为“行转列”或“行列互换”。例如,在一个学生成绩表中,原始数据可能按照学生姓名、科目和分数...

    EXCEL中的表格,行变列,列变行文.pdf

    Excel 中的表格行变列、列变行技巧 Excel 是一個功能强大且广泛应用的电子表格软件,它提供了许多实用功能来处理和分析数据。其中,行变列和列变行是两个常用的数据处理操作,能够快速地将数据从一行轉换到多行或从...

    sql语言让数据行变列显示

    sql语言让数据行变列显示,简单的sql语句就能实现

    行变列与业务数据组合查询sql

    行变列与业务数据组合查询sql,具体业务描述及sql见具体sql编写,不清楚,可以留言讨论

    sql利用union all行转列

    ### SQL利用UNION ALL进行行转列方法解析 在数据库操作中,经常需要对数据进行各种转换以满足不同的业务需求。其中,“行转列”(Pivot)是一种常见的数据转换方式,它能够将数据表中的某列或多列值转换为多列的...

    IOS很好的网格视图布局(可变行变列)

    "IOS很好的网格视图布局(可变行变列)"这个主题就是关于如何在iOS应用中实现这种自适应的网格视图。 在iOS中,有两种主要的方法来创建网格视图:一种是使用`UICollectionView`,另一种是自定义视图。`...

    C#终极版DataTable集行转列

    C#终极版DataTable集行转列,完全不用任何修改,可直接使用!

    sqlserver行变列

    ### SQL Server 行转列操作详解 在数据库管理和数据分析领域,有时我们需要将表格中的行转换成列,这种操作称为“行转列”。行转列在实际应用中非常常见,尤其是在处理具有多维度的数据集时。例如,从一个记录学生...

    access行转列示例

    “行转列”是将数据表中的一行数据转换为多列显示,反之,“列转行”则是将一列数据转化为多行展示。这两种操作在处理宽表和长表之间的转换时特别有用,例如,当需要将多个具有相同属性的数据项合并到同一列或者将...

    SQL语句将行转换成列

    sql语句将行转换成列 declare @sql varchar(8000) set @sql = 'select 物料代码' select @sql = @sql + ',sum(case 地区 when '''+地区+''' then 数量 end) ['+地区+']' + ',sum(case 地区 when '''+地区+'''...

    Linq动态查询、行转列

    本篇将深入探讨如何利用LINQ进行动态查询以及如何实现行转列,这对于构建灵活的数据分析和展示功能至关重要。 首先,让我们来理解什么是LINQ动态查询。在传统的LINQ查询中,我们通常使用lambda表达式或方法链来定义...

    从不同的角度看矩阵的行秩与列秩

    矩阵的转置操作将矩阵的行变成列,反之亦然,这在几何上提供了从输入到输出和从输出到输入的视角转换。矩阵的转置对于理解和验证行秩等于列秩也是至关重要的,因为它揭示了行向量和列向量之间的对称性。通过对矩阵...

    三行三列数组

    三行三列数组

    oracle行转列oracle行转列

    在Oracle数据库中,将行数据转换为列数据是一种常见的数据操作需求,特别是在处理报表或进行数据分析时。这种操作通常被称为“行转列”,其目的是为了更直观地展示数据或者满足某些特定的数据分析需求。在提供的文件...

    sql中把指定的列作为标题列

    在SQL查询语言中,将指定的列作为标题列是一种数据透视技术的应用,这种技术主要用于将行数据转换为列数据,从而实现数据结构的重塑,便于数据分析和报告制作。这一过程通常被称为“列转行”或“透视”,在SQL中可以...

    列变成行存储过程将列变成行的存储过程

    标题中的“列变成行存储过程”是指在数据库中,通过特定的编程手段将原本存储为列的数据转换成行的形式展示或处理。这种操作通常在数据处理时非常有用,特别是当需要将多列数据合并成一列,或者进行复杂的报表生成时...

    table固定行和列

    在Web开发中,表格(Table)是展示数据的常用元素,但如何实现表格的固定行和列是一项常见的需求。这通常涉及到CSS样式控制,以便在滚动时保持特定行或列始终可见,提升用户浏览大量数据时的体验。下面将详细探讨...

Global site tag (gtag.js) - Google Analytics