精华内容
下载资源
问答
  • Mysql数据库行列转换
    2021-03-12 01:32:39

    案例:
    1.建表

    CREATE TABLE `total` (
      `id` int(10) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      `course` varchar(20) DEFAULT NULL,
      `score` int(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    2.全部数据
    在这里插入图片描述
    3.SQL语句实现行列转换

    SELECT id,`name`,
    MAX(CASE course WHEN '语文' THEN IFNULL(score,0) ELSE 0 END) AS '语文',
    MAX(CASE course WHEN '数学' THEN IFNULL(score,0) ELSE 0 END) AS '数学'
    FROM total
    GROUP BY id
    

    4.结果表
    在这里插入图片描述

    更多相关内容
  • mysql数据库行列转换

    2020-08-20 21:08:55
    例1: 思路: 1.建表并插入数据 CREATE table score( name varchar(11), Math int, English int ); insert into score (name,Math,...2.中间转换,即二维转一维得到一维表 3.利用IF判断并分组即可得到转换的表 sel

    例1:

    思路:

    1.建表并插入数据
    CREATE table score(
    name varchar(11),
    Math int,
    English int
    );
    insert into score (name,Math,English) values ('甲',89,78)
    insert into score values ('乙',77,81)
    insert into score values ('丙',87,98)
    

    在这里插入图片描述

    2.中间转换,即二维转一维得到一维表
    3.利用IF判断并分组即可得到转换的表
    select 
    c2 as '课程',
    sum(if(c1='甲',c3,0)) as '甲',
    sum(if(c1='乙',c3,0)) as '乙',
    sum(if(c1='丙',c3,0)) as '丙' 
    from
    ((select name as c1,'Math' as c2,Math as c3 from score )
    union
    (select name,'English' as c2,English from score) ) 
    as tx
    group by c2
    

    在这里插入图片描述

    例2:

    创建表并添加数据

    create table usera(
    userid int,
    Type int,
    Duration_sum int
    )
    alter table usera modify Duration_sum varchar(30)
    insert into usera values (51855025,1,1225)
    insert into usera values (51855025,2,2705)
    insert into usera values (53711033,1,'......')
    insert into usera values (53711033,2,'......')
    

    在这里插入图片描述
    (省略号代表的是数据。。。。)

    select
    userid,
    sum(if(Type=1,Duration_sum,0)) as Duration_sum_type1,
    sum(if(Type=2,Duration_sum,0)) as Duration_sum_type2
    from
    usera
    group by userid
    
    

    在这里插入图片描述

    展开全文
  • 数据库行列转换

    2021-02-02 11:54:57
    虽然开发过程中没用过行列转换,但是听说面试时常常会遇到这个问题,以前在网上也看到过大神的例子,今天自己仔细的玩了下,希望和大家分享一下了。 注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦...

    虽然开发过程中没用过行列转换,但是听说面试时常常会遇到这个问题,以前在网上也看到过大神的例子,今天自己仔细的玩了下,希望和大家分享一下了。 注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的SysColum

    虽然开发过程中没用过行列转换,但是听说面试时常常会遇到这个问题,以前在网上也看到过大神的例子,今天自己仔细的玩了下,希望和大家分享一下了。

    注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的SysColumns

    (一)行转列的方法

    先说说行转列的方法,这个就比较好想了,利用拼sql和case when解决即可

    实现目的

    9ea43c7a0d58f652867de94b4fc9534f.bmp

    1:建立测试用的数据库

    CREATE TABLE RowTest(

    [Name] [nvarchar](10) NULL,--名稱

    [Course] [nvarchar](10) NULL,--課程名稱

    [Record] [int] NULL--課程的分數

    )

    2:加入测试用的数据库(先加入整齐的数据)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    insert into RowTest values (,,)

    3:设计想法

    行转列的原理就是把行的类别找出来当做查询的字段,利用case when 把当前的分数加到当前的字段上去,最后用group by 把数据整合在一起

    4:通用方法

    declare @sql nvarchar(max)@sql=@sql+++TCourse.Course++TCourse.Coursefrom (select distinct Course fromRowTest)TCourseprint @sql

    exec(@sql)

    说明: 把所有的课程名称取出来作为列(查询表TCourse)

    用case when 的方法把sql 拼出来

    5:课外试验

    (1)加入数据

    insert into dbo.RowTest values (,,)

    去除max 方法会报错,因为一条可能对应多行数据

    (2)加入数据

    insert into dbo.RowTest values (,,)

    数据会多出一列,但是其他人无此课程就会为0

    至此,数据行转列ok

    (二)列转行的新方法开始了

    实现目的

    bb362bc594df71b1b0c69ee814a252d8.bmp

    1:实现原理

    在网上看了别人的做法,,基本都是用union all 来一个个转换的,我觉得不太好用。

    首先我想到了要把所有的列名取出来,就在网上查了下获取表的所有列名

    然后我可以把主表和列名形成的表串起来,这样就可以形成需要的列数,然后根据判断取值就完成了了,呵呵

    2:建立表格

    create table CoulumTest

    (

    Name nvarchar(10),

    语文int,

    数学int,

    英语int)

    3:加入数据

    insert into CoulumTest values(N,90,91,92)

    insert into CoulumTest values(N,80,81,82)

    4:经典的地方来了

    selectCT.Name,Col.name 课程,

    (then CT.语文 when Col.name=Nthen CT.数学

    when Col.name=Nthen CT.英语 end ) as 分数 fromCoulumTest CT

    left join ()) Col on Col.name<>

    你没看错,一句话搞定,但是有个问题迷惑了我,我觉得还不够简化,如果可以把case when 都不用了就更好了,请大神们指点小弟一下了。怎么根据

    Col的name 直接取得分数

    f68f2add0b68e4f9810432fce46917b7.png

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 最近突然玩起了sql语句,想着想着便给自己出了一道题目:“行列转换”。起初瞎折腾了不少时间也上网参考了一些博文,不过大多数是采用oracle数据库当中的一些便捷函数进行处理,比如”pivot”。那么,在Mysql环境下...
  • Mysql实现行列转换

    千次阅读 2022-02-15 15:41:04
    mysql数据库如何实现行列转换 方案一: select name, sum(case when course='java' then grade end) as java, sum(case when course='C++' then grade end) as C++, sum(case when course='C#' then grade end) as...

    mysql数据库如何实现行列转换
    在这里插入图片描述
    在这里插入图片描述
    方案一:

    select  name,
    sum(case when course='java' then grade end) as java,
    sum(case when course='C++' then grade end) as C++,
    sum(case when course='C#' then grade end) as C#
    from test group by name
    

    方案二:

    select distinct c.`name` AS name,
    (select grade from test where name = c.`name` and course = 'java' )as java,
    (select grade from test where name = c.`name` and course = 'C++' )as C++,
    (select grade from test where name = c.`name` and course = 'C#' )as C#
    from test c
    

    结合项目用到的sql:

    select  MAIN_STATION_CODE_ as stationCode,
    case when SUBSTR(PLAN_START_DATE_, 1, 10)=curdate() then STATION_ else "" end as firstDay,
    case when SUBSTR(PLAN_START_DATE_, 1, 10)=DATE_SUB(curdate(),INTERVAL -1 DAY) then STATION_ else "" end as secondDay,
    case when SUBSTR(PLAN_START_DATE_, 1, 10)=DATE_SUB(curdate(),INTERVAL -2 DAY) then STATION_ else "" end as thirdDay,
    case when SUBSTR(PLAN_START_DATE_, 1, 10)=DATE_SUB(curdate(),INTERVAL -3 DAY) then STATION_ else "" end as fourthDay
    from ps_overhaul_plan_row group by MAIN_STATION_CODE_
    
    方案三:带汇总
    select ifnull(uid,'Total') uid, uname,
    sum(if(`course`='java',grade,0)) 'java',
    sum(if(`course`='C++',grade,0)) 'C++',
    sum(if(`course`='C#',grade,0)) 'C#',
    sum(score) 'total'
    from course
    group by uid
    with ROLLUP
    
    展开全文
  • mysql中的行列转换

    2021-12-07 09:30:42
    mysql中的行列转换
  • mysql行列转换

    2018-03-02 14:07:03
    java语言 数据库 mysql数据库 sql行列转换的例子 详解
  •   报表系统中经常需要行列转换,在 SQL Server 等数据库中可以用 PIVOT 、UNPIVOT 来实现,但是在 MySQL 数据库中却不支持,下面介绍 MySQL 中的行列转换的实现方法。 1.行转列 例如下面是数据库中的原始表格: ...
  • 三张表:student.sqlscore.sqlcourses.sql首先把三张表都关联起来,然后开始使用行列转换,查询出效果如下:代码如下:select e.stu_id,e.stu_name, sum(if(e.course_name='大学语文',e.scores,0)) as "...
  • 这是典型的行列转换问题,现给出两种转换语句: SQL1: select name, sum(case when course='java' then grade end) as java, sum(case when course='C++' then grade end) as C++, sum(case when course='C#' then...
  • 数据库行列转换技巧

    2021-02-08 09:25:59
    数据库中有表记录:客户名称,商品类型,购买数量。 需要转换成:每个客户买的各种类型的商品总量是多少。 这里可以用到oracle的 pivot 函数,这个函数可以方便的将行列进行准换。(sqlserver 也支持) ...
  • 先在自己本地的数据库插入上图的表 create table year1( year int, month int, amount double ); insert into year1 values (1991,1,1.1); insert into year1 values (1991,2,1.2); insert into year1 values ...
  • 数据样本: create table tx( id int primary key, c1 char(2...mysql> 其实数据库中也可以用 CASE WHEN / DECODE 代替 IF sum(if(c2='B1',C3,0)) AS B1 可改写为 sum(case c2 when 'B1' then C3 else 0 end) AS B1
  • MySQL行列转换

    2021-01-18 18:45:33
    比如一张表在数据库中是这样的:图1但是,需要的结果可能是这样:图2这个时候就得行列转换了。1.行转列的几种方法1.1 case... when ... then ... else ... endselectuname,uid, -- 正常查询的字段sum(casewhen ...
  • 《Mysql应用数据库实现行列...MYSQL教程这篇文章通过sql示例代码给大家介绍了mysql数据库如何实现行列转换,下面话不多说,直接来看示例代码吧.MYSQL教程原表:MYSQL教程表名 :user----------------------------------...
  • mysql行列转换

    万次阅读 2018-04-27 14:48:24
    目的:实现行列转换功能需求:导出成如下图的Excel数据:数据库格式如下图除报销表外还涉及到用户表、部门表、等许多从表我们需要将数据进行筛选(报销成功的),合并,行列转换1.筛选并合并SELECT su.name AS "...
  • mysql行列转换方法总结数据样本:create table tx(id int primary key auto_increment,c1 char(2),c2 char(2),c3 int);insert into tx(c1,c2,c3) values('A1','B1',9),('A2','B1',7),('A3','B1',4),('A4','B1',2),('...
  • 开发过程中,因为历史原因或性能原因,需要对表的列数据转为行数据,或行数据转换为列数据使用,本文将介绍mysql表数据行列转换的方法,提供完整演示例子及sql技巧。1.行转列创建测试数据表及数据CREATE TABLE `...
  • 1、Concat函数。 连接字符串常用:concat函数。如sql查询条件的like查询, AND c.name like concat(#{param.name},’%’) 将Int 转为varchar经常用 concat函数,比如concat(8,’0′) 得到字符串 ’80’  ...
  • Mysql行列转换

    2021-01-19 16:43:13
    Table pivot行翻转2019年6月6日9:16标准化的数据库是非常强大的,在数据库的开发中,开发者需要竭尽所能的完善的数据保存的方法,同时保证读写的速度,最终一般通过三泛式来解决大多数问题,有时候我们需要信息以行...
  • MySQL行列转换函数 – group_concat 1、环境搭建 CREATE TABLE temp_dep( id INT, depId INT, name varchar(20), age INT, address varchar(100), brithday date ); INSERT INTO temp_dep(id, depId, name, ...
  • 表名 :user name course grade zhangsan java 70 zhangsan C++ 80 lisi java 90 lisi C# 60 用一条 SQL 语句得到如下形式: name java C++ C# zhangsan 70 80 null lisi 90 null 60 分析:这是典型的行列转换问题...
  • mysql - 行列转换 查询

    2021-01-28 04:51:24
    jdbc url:详细属性可参考Eg:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8mysql URL: mysql -uroot -p --default-character-set=utf8这就重点说下:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,382
精华内容 2,152
关键字:

mysql数据库行列转换

mysql 订阅