SQL行转列与列转行详情

1.数据集

+---+----------+
|id |login_date|
+---+----------+
|01 |2021-02-28|
|01 |2021-03-01|
|01 |2021-03-02|
|01 |2021-03-04|
|01 |2021-03-05|
|01 |2021-03-06|
|01 |2021-03-08|
|02 |2021-03-01|
|02 |2021-03-02|
|02 |2021-03-03|
|02 |2021-03-06|
|03 |2021-03-06|
+---+----------+

以"连续登录"中的数据为例:

select id, 
       concat_ws(',',collect_list(login_date)) cw
from data
group by id;

结果:

+---+----------------------------------------------------------------------------+
|id |cw                                                                          |
+---+----------------------------------------------------------------------------+
|01 |2018-02-28,2018-03-01,2018-03-02,2018-03-04,2018-03-05,2018-03-06,2018-03-08|
|02 |2018-03-01,2018-03-02,2018-03-03,2018-03-06                                 |
|03 |2018-03-06                                                                  |
+---+----------------------------------------------------------------------------+

以上面SQL生成的数据为基准,执行下列SQL:

select id, login_date
from t 
lateral  view explode(split(cw,','))  b AS login_date;

结果:

+---+----------+
|id |login_date|
+---+----------+
|01 |2018-02-28|
|01 |2018-03-01|
|01 |2018-03-02|
|01 |2018-03-04|
|01 |2018-03-05|
|01 |2018-03-06|
|01 |2018-03-08|
|02 |2018-03-01|
|02 |2018-03-02|
|02 |2018-03-03|
|02 |2018-03-06|
|03 |2018-03-06|
+---+----------+

到此这篇关于SQL行转列与列转行的文章就介绍到这了,更多相关SQL行转列与列转行内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql 行转列和列转行实例详解

    mysql行转列.列转行 语句不难,不做多余解释了,看语句时,从内往外一句一句剖析 行转列 有如图所示的表,现在希望查询的结果将行转成列 建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL, `SCORE` float DEFAULT '0', PRIM

  • mssql 数据库表行转列,列转行终极方案

    复制代码 代码如下: --行转列问题 --建立測試環境 Create Table TEST (DATES Varchar(6), EMPNO Varchar(5), STYPE Varchar(1), AMOUNT Int) --插入數據 Insert TEST Select '200605', '02436', 'A', 5 Union All Select '200605', '02436', 'B', 3 Union All Select '200605', '02436', 'C', 3

  • SQL行转列、列转行的简单实现

    前言 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM student PIVOT ( SUM(score) FOR subject IN (语文, 数学, 英语) ) 通过上面 SQL 语句即可得到下面的结果 PIVOT 后跟一个聚合函数来拿到结果,FOR 后面跟的科目是我们要转换的列,这样的话科目中的语文.数学.英语就就被转换为列.IN 后面跟的就是具体的科目值. 当然

  • SQL行转列和列转行代码详解

    行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). --创建测试环境 USE tempdb; GO IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orde

  • SQL行转列与列转行详情

    1.数据集 +---+----------+ |id |login_date| +---+----------+ |01 |2021-02-28| |01 |2021-03-01| |01 |2021-03-02| |01 |2021-03-04| |01 |2021-03-05| |01 |2021-03-06| |01 |2021-03-08| |02 |2021-03-01| |02 |2021-03-02| |02 |2021-03-03| |02 |2021-03-06| |03 |2

  • SQL行转列与列转行

    1.数据集 +---+----------+ |id |login_date| +---+----------+ |01 |2021-02-28| |01 |2021-03-01| |01 |2021-03-02| |01 |2021-03-04| |01 |2021-03-05| |01 |2021-03-06| |01 |2021-03-08| |02 |2021-03-01| |02 |2021-03-02| |02 |2021-03-03| |02 |2021-03-06| |03 |2

  • SQL Server数据库中伪列及伪列的含义详解

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个常识,对此不作具体详细阐述. 这里主要是提到的RowId引起了一点思考. 那么,这个RowId是个什么玩意?能不能更加直观一点来看看RowId的信息?代表什么含义?这个当然也是可以的. Oracle中的表中有一个伪列的概念,就是在查询表的时候加上select rowid,* from Table,会

  • SQL 新增/修改 表字段列的类型等

    例如: 修改(列名前 要有column关键字) ALTER TABLE [USER] ALTER column [NAME] varchar(35) null 新增 ALTER TABLE [USER] ADD [PRICE]     numeric(18, 8) NULL  DEFAULT 0 通过更改.添加.除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义. 语法 ALTER TABLE table  { [ ALTER COLUMN column_name      { new_

  • SQL Server 数据库调整表中列的顺序操作方法及遇到问题

    SQL Server 数据库中表一旦创建,我们不建议擅自调整列的顺序,特别是对应的应用系统已经上线,因为部分开发人员,不一定在代码中指明了列名.表是否可以调整列的顺序,其实可以自主设置,我们建议在安装后设置为禁止. 那么,如果确实需要调整某一列的顺序,我们是怎么操作的呢? 下面,我们就要演示一下怎么取消这种限制.当然,通过取消限制的演示,相信大家也知道了怎么添加限制了. 需求及问题描述 1)测试表 Test001 (2)更新前 (3)例如,需求为调整 SN5 和SN4的序列 点击保存时报错 修改

  • 批处理bat将txt文本第一列内容相同的行的最后一列的数字相加

    小弟不材,想了好几天没写出来,才来论坛求助,希望各位高手帮帮忙解下题 ,在此先谢谢各位了- 比如,aaa.txt 内容如下 11111,20150430,10 11111,20150430,20 11111,20150430,30 22222,20150430,40 33333,20150430,50 44444,20150430,60 44444,20150430,70 55555,20150430,80 66666,20150430,90 66666,20150430,100 77777,2

  • 解决elementui表格操作列自适应列宽

    业务需要前端根据用户权限动态显示对应按钮,直接把操作列的列宽写死的话,在按钮少的情况下不是那么好看,所以想到了一个骚操作... 写死宽度时是这样的: 开始 给操作列绑定宽度属性 :width="actionColWidth < 80 ? 80 : actionColWidth" 把操作列的所有按钮用一个div套起来 class="action-col" <div class="action-col"> <el-button

  • Sql Server数据库远程连接访问设置详情

    目录 步骤一:设置sql server数据库 1.登录sql server数据库 2.点击根目录右键,选择属性 3.设置服务器的方面选项 4.设置sql server 配置管理器 步骤二:设置防火墙入站规则 步骤三:华为云服务器安装sql server并设置远程访问 1.登录华为云,点击安全组(主要是对安全组进行设置端口) 2.创建安全组 步骤一:设置sql server数据库 1.登录sql server数据库 以新建一个新用户名test作为远程连接登录名.在本地登录sql server数据库

随机推荐