记一次行转列-sql

  1. 创建测试表

    CREATE TABLE  ZLTEST (
      TEACHER_NO VARCHAR(10),
      WEEK_NO VARCHAR(10),
      COURSE VARCHAR(30)
    )
  2. 插入数据
    INSERT INTO ZLTEST VALUES (1,1,'有')
    INSERT INTO ZLTEST VALUES (2,2,'有')
    INSERT INTO ZLTEST VALUES (1,3,'有')
    INSERT INTO ZLTEST VALUES (2,4,'有')
    INSERT INTO ZLTEST VALUES (1,5,'有')
    INSERT INTO ZLTEST VALUES (2,1,'有')


    3、case when实现:

    SELECT ZLTEST.TEACHER_NO AS 老师编号,
      max(CASE WHEN WEEK_NO =1 THEN COURSE ELSE '' END ) as 星期一,
      max(CASE WHEN WEEK_NO = 2 THEN COURSE ELSE '' END ) AS 星期二,
      max(CASE WHEN WEEK_NO = 3 THEN COURSE ELSE '' END ) AS 星期三,
      max(CASE WHEN WEEK_NO = 4 THEN COURSE ELSE '' END ) AS 星期四,
      max(CASE WHEN WEEK_NO = 5 THEN COURSE ELSE ''  END ) AS 星期五
    FROM ZLTEST GROUP BY ZLTEST.TEACHER_NO

  3. ORACLE 数据库可以用decode函数实现:
    SELECT ZLTEST.TEACHER_NO AS 老师编号,
      max(decode(t.WEEK_NO,'1',COURSE)) as 星期一,
      max(decode(t.WEEK_NO,'2',COURSE)) as 星期二,
      max(decode(t.WEEK_NO,'3',COURSE)) AS 星期三,
      max(decode(t.WEEK_NO,'4',COURSE)) AS 星期四,
      max(decode(t.WEEK_NO,)'5',COURSE) AS 星期五
    FROM ZLTEST
    GROUP BY  ZLTEST.TEACHER_NO
    ORDER BY ZLTEST.TEACHER_NO

原文地址:https://www.cnblogs.com/zuoruining/p/9112780.html

时间: 2024-10-18 23:50:54

记一次行转列-sql的相关文章

Oracle行转列SQL

-- Create table /*create table TEST_TABLE ( STUDENT VARCHAR2(200), SUBJECT VARCHAR2(200), GRADE NUMBER ) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); */ /*insert into test_

行转列SQL语句

select top 10 * from schedule_month where years=2016 and months=7 and managerid=45SELECT top 10 cast(years AS varchar) + '-' + RIGHT('0' + CAST(months AS varchar), 2) + '-' + RIGHT('0' + REPLACE(days, 'day', ''), 2) AS trueday, job_title_id, manageri

sql的行转列(PIVOT)与列转行(UNPIVOT)

在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(30), --科目 [Score] FLOAT, --成绩 ) INSERT INTO [StudentScores] SE

SQL Fundamentals SQL列字段的处理 SQL(case、decode、行转列)

列字段的处理 SQL Case 对列做处理 SQL> select deptno,sum(sal) from emp group by deptno; Select case when deptno=10 then 'ACCOUNTING' when deptno=20 then 'RESERCH' when deptno=30 then 'SALES' end, sum(sal) from emp group by deptno 列字段的处理 SQL Decode 还有一种情况是当什么都不是的

sql的行转列和列转行

一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(30), --科目 [Score] FLOAT, --成绩 ) INSERT INTO [StudentScores] SELECT '张三', '语文', 80 INSERT INTO [StudentScores] SELECT '张三', '数学', 90 INSERT INTO [StudentS

SQL行转列与列转行(转)

原文: http://blog.csdn.net/jx_870915876/article/details/52403472 add by zhj: 本文是以MySQL为例说明的,但其实它适用于所有关系型数据库 行转列 例如:把图1转换成图2结果展示 图1 图2 1 2 3 4 5 6 7 CREATE TABLE `TEST_TB_GRADE` (   `ID` int(10) NOT NULL AUTO_INCREMENT,   `USER_NAME` varchar(20) DEFAULT

SQL行转列(PIVOT)与列转行(UNPIVOT)简明方法

原文地址:https://www.cnblogs.com/linJie1930906722/p/6036714.html 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(3

Oracle数据 行转列

记录一段行转列SQL代码: select cs.standard_id,cs.area_code,cs.exu_dept, regexp_substr(exu_dept, '[^,]+', 1, level) as dept_id from ca_stand_exu_dept cs connect by id = prior id and instr(exu_dept||',', ',', 1, level) > 0 and prior dbms_random.value is not null

IT忍者神龟之 oracle行转列、列转行

一.行转列 须要将例如以下格式 转换为: 这就是最常见的行转列,主要原理是利用decode函数.聚集函数(sum).结合group by分组实现的 [sql] view plaincopy create table test( id varchar2(255) primary key not null, name varchar2(255), course varchar2(255), score varchar2(255) ); insert into test values(sys_guid