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

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

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 NO,  MAX(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(VALUE)  AS 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 SERVER特殊行转列案列一则相关推荐

  1. 在SQL Server中将行有效地转换为列

    本文翻译自:Efficiently convert rows to columns in sql server I'm looking for an efficient way to convert ...

  2. 42000[SQL Server]ORDER BY子句中的列无效,该列没有包含在聚合函数或GROUP BY 子句

    [Err] 42000 - [SQL Server]ORDER BY 子句中的列 "t_xxx.inputDate" 无效,因为该列没有包含在聚合函数或 GROUP BY 子 错误 ...

  3. SQL Server命令行

    本文来源于网络收集,Mark一下. 1.登陆 osql -S localhost -U sa -P 123456 T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL ...

  4. MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具

    这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...

  5. sql 如何设置行级锁_如何使用SQL Server 2016行级安全性过滤和阻止数据访问

    sql 如何设置行级锁 SQL Server 2016 came with many new features and enhancements for existing ones, that con ...

  6. 图解sql server 命令行工具sqlcmd的使用

    一 操作实例 安装了sql server后此工具已经有了: 以sa登录: 打个命令,没反映: 可执行操作系统命令:加上!!即可: 查看帮助: 再打命令,也没反映:查询结果不显示: 要加上go,才行: ...

  7. SQL SERVER PIVOT 行转列、列传行

    在数据库操作中,有些时候我们遇到需要实现"行转列"的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIM ...

  8. SQL SERVER: 行转列

    SQL Server 行转列相关内容 主要为动态SQL和静态SQL 的写法(一列转多行) 表 新建表 if exists (select * from sysobjects where id = OB ...

  9. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  10. SQL Server 2008行数据和页数据压缩解密

    SQL Server的性能主要取决于磁盘I/O效率,提高I/O效率某种程序上就意味着提高性能.SQL Server 2008提供了数据压缩功能来提高磁盘I/O. 数据压缩意味着减小数据的有磁盘占用量, ...

最新文章

  1. 安装npm_前端开发:node.js的node包管理器npm安装以及使用
  2. javaScript设计模式---(单例模式学习)
  3. Web前端技术分享:img标签与background插入图片的区别
  4. 怎样进入服务器修改东西,进入服务器修改数据库
  5. 绑定MAC地址 局域网防arp ARP病毒
  6. 《SolidWorks 2013中文版完全自学手册》——2.5 添加几何关系
  7. 零基础学python大概要多久-怎么自学python,大概要多久?
  8. 卷积神经网络发展简史
  9. 银联在线支付、第三方快捷支付三种快捷支付模式有何区别?
  10. 智慧食堂管理系统打造健康食堂新理念
  11. api 接口管理工具
  12. [原创]UMail for linux邮件服务器备份/还原邮件数据与数据库
  13. 北大软微计算机动画,【新增】2019年北京大学软微学院【电影方向】考研653、905参考书真...
  14. win11窗口桌面管理器突然很吃内存?
  15. 用github创建php网站,github可以用来做什么
  16. 【Linux】树莓派控制人体红外传感器
  17. 搭建供需对接平台 助力汽车产业发展 2021大连金普新区汽车产业链供需对接大会开幕
  18. 英国哈德斯菲尔德大学留学生本科未毕业如何将留学路进行到底
  19. using Aspose文档合并总结
  20. Exchange Server 2010部署(一)部署Windows Server 2008 R2域控制器

热门文章

  1. 部门内 IDEA 分享,超实用技巧!
  2. Linux 进程必知必会
  3. 谈 Kubernetes 的架构设计与实现原理
  4. 线性矩阵不等式LMI的运用与Lipschitz非线性系统观测器的设计
  5. 深度学习模型压缩与加速综述!
  6. 引用次数在 15000 次以上的都是什么神仙论文?
  7. 深度学习环境配置指南:Pytorch、TensorFlow、Keras
  8. NumPy迎来重大版本更新
  9. 2020年「21篇」医学影像算法最佳综述
  10. 知识蒸馏在推荐系统的应用