iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >sql行转列、列转行的方法
  • 234
分享到

sql行转列、列转行的方法

2024-04-02 19:04:59 234人浏览 八月长安
摘要

  如题:有一张表EMP,里面有两个字段:name,chengji  有三条记录,分别表示语文(name) 70分,数学(name) 80分,英语(name) 58分,请用一条

  sql行转列、列转行的方法

如题:有一张表EMP,里面有两个字段:name,chengji  有三条记录,分别表示语文(name) 70分,数学(name) 80分,英语(name) 58分,请用一条sql查询出这三条记录并以条件显示出来,大于等于80表示优秀,大于等于60表示及格,小于60分表示不及格!要求显示格式如上!

首先我们创建表,添加如题数据!

CREATE TABLE emp(NAME VARCHAR(20),chengji INT);

INSERT INTO emp VALUES('语文',70),('数学',80),('英语',58);

sql行转列、列转行的方法

根据题目要求,我们需要将这三行的结果做判断,然后以列的形式显示,这其中有一个行转列的操作。


第一种sql写法:


SELECT MAX(CASE WHEN  NAME='语文' THEN (CASE WHEN chengji>=80  THEN '优秀' WHEN   chengji<80 AND chengji>=60 THEN '及格' ELSE  '不及格' END)  ELSE '' END) '语文'  ,

MAX(CASE WHEN  NAME='数学' THEN (CASE WHEN chengji>=80  THEN '优秀' WHEN   chengji<80 AND chengji>=60 THEN '及格' ELSE  '不及格' END)  ELSE '' END)  '数学',

MAX(CASE WHEN  NAME='英语' THEN (CASE WHEN chengji>=80  THEN '优秀' WHEN   chengji<80 AND chengji>=60 THEN '及格' ELSE  '不及格' END) ELSE '' END ) '英语' FROM  emp

执行结果如下:

sql行转列、列转行的方法

  备注:上述sql中使用了max(case)这种用法,max这里的主要作用是为了在3次判断中,取到不为空字符串''的标题,语文,数学,英语!


 第二种写法采用group_concat函数也是可以拼接出如图所有要的结果写法如下:


SELECT GROUP_CONCAT(NAME SEPARATOR '|')  FROM   emp  UNION ALL   SELECT   

GROUP_CONCAT(CASE WHEN chengji>=80  THEN '优秀' WHEN   chengji<80 AND chengji>=60 THEN '及格' ELSE  '不及格' END   SEPARATOR '|' ) FROM  emp

执行结果如下:

sql行转列、列转行的方法

这样看,这个结果也还是可以接受, 这里采用了group_concat函数,将列的类容连接起来,作为行!不过这样的结果有点生硬的感觉!


补充一点:这里的sql写法我们可以看出,如果想要通过第一种写法。我们前面必须要知道列的内容如语文,数学,英语,但是第二种我们却不用知道! 这里我们想到了一种方法,通过存储过程,将想要的第一种方法的sql拼出来,然后执行这样的话,后面如果我们的表再添加列,或者减少列,也不会报错!

写法如下:

DELIMITER $$


USE `yhtest`$$


DROP PROCEDURE IF EXISTS `yhtest`$$


CREATE DEFINER=`root`@`%` PROCEDURE `yhtest`()

BEGIN

SET @sql = NULL;

SELECT

  GROUP_CONCAT(DISTINCT

    CONCAT(

       'MAX(CASE WHEN  NAME=','\'',emp.name,'\'','THEN (CASE WHEN chengji>=80  THEN ', '\'' ,'优秀','\'' ,' WHEN  

        chengji<80 AND chengji>=60 THEN ', '\'' ,'及格' ,'\'' ,' ELSE ', '\'' ,'不及格' ,'\'' ,' END)  ELSE ', '\'','\'',' END) ','\'',emp.name,'\'' 

    )

  )

INTO @sql

FROM emp ;

SET @sql = CONCAT('select  ',@sql, ' from  emp');

PREPARE stmt1 FROM @sql;

EXECUTE stmt1;

DEALLOCATE PREPARE stmt1;

  END$$


DELIMITER ;

调用一下: call yhtest();

sql行转列、列转行的方法

插入几条数据!我们假设提前不知道有多少个科目!

INSERT INTO emp VALUES('物理',72),('体育',84);

sql行转列、列转行的方法

这里有个问题!由于我们在存储过程中使用了group_concat函数,这个拼接函数最大拼接长度为1024(默认) 超过固定长度,截断处理! 由数据库参数group_concat_max_len 控制!我们可以根据需要认为调整!


group_concat  调整拼接符号 group_concat(name  separator  '_')

group_concat  排序:group_concat(name order by name  separator  '_')



 

您可能感兴趣的文档:

--结束END--

本文标题: sql行转列、列转行的方法

本文链接: https://www.lsjlt.com/news/41718.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL行转列与列转行的方法
    本文小编为大家详细介绍“SQL行转列与列转行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL行转列与列转行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据集+---+----------+|i...
    99+
    2023-06-29
  • sql多表行转列和级联行转列的方法
    本篇内容主要讲解“sql多表行转列和级联行转列的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql多表行转列和级联行转列的方法”吧!现有两表A,B A表存...
    99+
    2024-04-02
  • SQL行转列与列转行详情
    1.数据集 +---+----------+ |id |login_date| +---+----------+ |01 |2021-02-28| |01 |2021-03-01| ...
    99+
    2024-04-02
  • SQL如何实现行转列和列转行
    这篇文章给大家分享的是有关SQL如何实现行转列和列转行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005...
    99+
    2024-04-02
  • mysql行转列和列转行的方法是什么
    在MySQL中,行转列和列转行通常使用以下方法来实现: 使用聚合函数和CASE语句进行行转列操作: SELECT ...
    99+
    2024-04-09
    mysql
  • Oracle——行转列与列转行
    文章目录 行转列创建表和增加测试数据方式一:先分组,再统计平铺方式二:使用Oracle11g自带函数PIVOT实现 列转行创建表和增加测试数据方式一:union all 单个合并...
    99+
    2023-09-02
    oracle 数据库 mysql
  • sql行列转换的方法是什么
    在SQL中,可以使用PIVOT和UNPIVOT来实现行列转换,具体方法如下: PIVOT:将行数据转换为列数据。使用PIVOT时,...
    99+
    2024-04-09
    sql
  • sql将行转列的方法有哪些
    在SQL中,可以使用以下方法将行转列:1. 使用CASE语句:- 使用多个CASE语句,每个语句对应一个要转置的列,并使用不同的条件...
    99+
    2023-10-12
    sql
  • 怎么在SQL中实现行转列和列转行
    怎么在SQL中实现行转列和列转行?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。行列转换就是如下图所示两种展示形式的互相转换行转列假如我们有...
    99+
    2024-04-02
  • sql实现列转行的方法是什么
    在SQL中,可以使用UNPIVOT操作符来实现列转行的功能。UNPIVOT操作符可以将多个列转换为行,将多个列的值转换为行的值,并将...
    99+
    2024-04-15
    sql
  • sql列转行最简单的方法是什么
    最简单的方法是使用UNPIVOT关键字进行列转行操作。 例如,假设有一个名为“table_name”的表,具有以下结构和数据: co...
    99+
    2024-02-29
    sql
  • DB2行列转置的行转列是怎样的
    DB2行列转置的行转列是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。建表,并insert 2行数据CREATE TABLE Sales...
    99+
    2024-04-02
  • mysql实现行转列的方法
    这篇文章主要介绍mysql实现行转列的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql实现行转列的方法:1、用cross join的方式实现,代码为【cross join...
    99+
    2024-04-02
  • mysql中的行列转换方法
    这篇文章主要介绍“mysql中的行列转换方法”,在日常操作中,相信很多人在mysql中的行列转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的行列转换方法”...
    99+
    2024-04-02
  • SQL行转列合并的语句
    这篇文章主要讲解了“SQL行转列合并的语句”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL行转列合并的语句”吧!   SQL> cr...
    99+
    2024-04-02
  • postgresql行转列与列转行图文教程
    目录列转行行转列总结列转行 PostgreSQL列转行的思路主要是利用string_to_array进行数组转换,然后用unnest进行行拆分 select t.bid_unit,unit_id from u...
    99+
    2023-06-11
    postgresql行转列 postgresql列转行
  • mysql 行转列
    以下是其中比较常见的几种方法: 使用GROUP_CONCAT函数 可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下...
    99+
    2023-08-20
    mysql 数据库 sql
  • MySQL中的经典面试题——行转列(列转行)
    目录 1、简介:   1. 行转列(Pivot): 2. 列转行(Unpivot): 2、行转列,列转行的思想 3、实现 3.1、实现行转列 3.2、总结(行转列)实现的两种方法   3.3、实现(列转行)  3.4、...
    99+
    2023-10-01
    mysql 数据库 sql
  • 通用的行列转换的方法
    在工作中经常需要用到行列转换进行聚合统计之类的事儿,现在就说一个最简单最通用的方法, 适应sum()/max()/min()等函数结合decode来实现行列转换, 拿oracle中典型的scott.emp表...
    99+
    2024-04-02
  • mysql 列转行
    一、列转行 mysql 数据库中,我们可能遇到将数据库中某一列的数据(多个值,按照英文逗号分隔),转化为多行数据(即一行转多行),然后join关联表,再转化为一行数据 如:有两张表,一用户表,一张学科表,需要查询学科表中的用户姓名 用...
    99+
    2023-08-31
    mysql 数据库 sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作