SQL SERVER特殊行转列案列一则

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:SQL SERVER特殊行转列案列一则  今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式. 我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据) INSERT INTO TEST ...
原文: SQL SERVER特殊行转列案列一则

  今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式.

image

我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据)

INSERT INTO TEST 
SELECT 1,    1,    '定型名称',    '预定型'           UNION ALL
SELECT 1,    2,    '进布方式',    '调平'             UNION ALL
SELECT 1,    3,    '21米长定型机开机速度',    '25'    UNION ALL
SELECT 1,    4,    '烘箱温度',    '195'             UNION ALL
SELECT 1,    5,    '门幅(CM)',    '200-210-210'     UNION ALL
SELECT 2,    1,    '过软',    'na'                  UNION ALL
SELECT 2,    2,    '调平',    'na'                  UNION ALL
SELECT 2,    3,    '25',    '+/-0.5'                UNION ALL
SELECT 2,    4,    '150',    '+/-5℃头尾烘箱除外'   UNION ALL
SELECT 2,    5,    '188-198-198',    '+/-3'

实现其功能的SQL语句如下所示

WITH T
AS
(
SELECT NO, ROW_NUMBER() OVER (PARTITION  BY NO ORDER BY STEP) AS ROWID, NAME, VAlUE FROM TEST
) 
SELECT NOMAX(NAME) AS NAME, MAX(VALUE) AS VALUE, MAX(NAME2) AS NAME2 , MAX(VALUE2) AS VALUE2
FROM
(
SELECT NO, NAME AS NAME, VALUE AS VALUE, NULL AS NAME2, NULL AS VALUE2 FROM T WHERE ROWID =1
UNION ALL
SELECT NO, NULL AS NAME ,NULL AS VALUE, NAME AS NAME2, VALUE AS VALUE2 FROM T WHERE ROWID =2
) TT
GROUP BY NO

但是这样有一个弊端就是同一NO的记录不定(不知道有多少条记录),那么上面SQL语句就不知道怎么写了,好在这个需求每个NO最多只有四条记录,所以可以写成下面. 如果记录数再多的话,这个SQL语句就写的很纠结。暂时也没有想到更好的解决方法。

WITH T
AS
(
SELECT NO, ROW_NUMBER() OVER (PARTITION  BY NO ORDER BY STEP) AS ROWID, NAME, VAlUE FROM TEST
) 
SELECT NO, MAX(NAME)  AS NAME  , MAX(VALUEAS VALUE 
   , MAX(NAME2) AS NAME2 , MAX(VALUE2) AS VALUE2
   , MAX(NAME3) AS NAME3 , MAX(VALUE3) AS VALUE3
   , MAX(NAME4) AS NAME4 , MAX(VALUE4) AS VALUE4
FROM
(
SELECT NO, NAME AS NAME , VALUE AS VALUE  , 
     NULL AS NAME2, NULL  AS VALUE2 ,
     NULL AS NAME3, NULL  AS VALUE3 ,
     NULL AS NAME4, NULL  AS VALUE4
FROM T WHERE ROWID =1
UNION ALL
SELECT NO, NULL AS NAME ,  NULL AS VALUE  , 
     NAME AS NAME2, VALUE AS VALUE2 ,
     NULL AS NAME3, NULL  AS VALUE3 ,
     NULL AS NAME3, NULL  AS VALUE4
FROM T WHERE ROWID =2
UNION ALL
SELECT NO, NULL AS NAME , NULL  AS VALUE  , 
     NULL AS NAME2, NULL  AS VALUE2 ,
     NAME AS NAME3, VALUE AS VALUE3 ,
     NULL AS NAME4, NULL  AS VALUE4
FROM T WHERE ROWID =3
UNION ALL
SELECT NO, NULL AS NAME , NULL  AS VALUE  , 
     NULL AS NAME2, NULL  AS VALUE2 ,
     NULL AS NAME3, NULL  AS VALUE3 ,
     NAME AS NAME4, VALUE AS VALUE4 
FROM T WHERE ROWID =4
) TT
GROUP BY NO
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
1天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
1天前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
3 0
|
1天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
2天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
3天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原
|
3天前
|
SQL 存储 安全
SQL Server 权限管理
SQL Server 权限管理
|
3天前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
|
存储 SQL 程序员
【Sql Server】存储过程通过作业定时执行按天统计记录
通过前两篇文章的学习,我们已经对创建表、存储过程、作业等功能点有所了解 本次将结合前面所学习的知识点,创建统计表以及结合作业定时按天以及实时统计域名各个长度的记录值
309 0
【Sql Server】存储过程通过作业定时执行按天统计记录
|
10月前
|
存储 SQL 数据库
SQL Server——为什么要使用存储过程?不使用是什么样的?
提高数据库执行速度,可能第一次见到这句话的小伙伴们感觉到非常的匪夷所思叭!怎么就提高了它的执行速度捏,从哪方面可以表现出来呢?既然这里要说到的是为什么要使用存储过程,也就是说它的优点是什么。那我们肯定就要对使用和不使用存储过程两方面来进行对比才能看出它的优点对吧。
|
存储 SQL Go
SQL Server 存储过程
SQL Server 存储过程
119 0