今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表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. Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform

    Expression构建DataTable to Entity 映射委托   1 namespace Echofool.Utility.Common { 2 using System; 3 using ...

  2. sql server 多行数据合并成一列

    首先是源数据: ),cip.CheckIn_StartTime, )),cip.CheckIn_EndTime, )),cip.Rental_Price)) as content from Check ...

  3. 在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)

    传统的关系数据库服务引擎往往并不是对超大量数据进行分析计算的最佳平台,为此,SQL Server中开发了分析服务引擎去对大笔数据进行分析计算.当然,对于数据的存放平台SQL Server数据库引擎而言 ...

  4. 向SQL Server 现有表中添加新列并添加描述.

    注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先 ...

  5. 第十篇 SQL Server安全行级安全

    本篇文章是SQL Server安全系列的第十篇,详细内容请参考原文. 不像一些其他industrial-strength数据库服务,SQL Server缺乏一个内置保护个别数据记录的机制,称为行级安全 ...

  6. 【译】第十篇 SQL Server安全行级安全

    本篇文章是SQL Server安全系列的第十篇,详细内容请参考原文. 不像一些其他industrial-strength数据库服务,SQL Server缺乏一个内置保护个别数据记录的机制,称为行级安全 ...

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

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

  8. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  9. SQL Server 动态行转列(轉載)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL, ...

  10. SQL Server pivot 行转列遇到的问题

    前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...

随机推荐

  1. 1Z0-053 争议题目解析520

    1Z0-053 争议题目解析520 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 520.Which of the following are not disabled by de ...

  2. 用react的ReactCSSTransitionGroup插件实现简单的弹幕动画

    1,开始的思路 公司想做直播方面的项目,并想加入弹幕的功能,直播的页面已经作为一个组件放在了用react+redux写好的一个网站项目上.所以技术老大让我研究下如何用react实现弹幕的功能.下面我就 ...

  3. SqlServer基础之(触发器)

    概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...

  4. JConsole远程连接配置

    JConsole远程连接还是有一点坑的.这里记录一下配置过程,好记性不如烂笔头. 1.在远程机的tomcat的catalina.sh中加入配置: JAVA_OPTS="$JAVA_OPTS ...

  5. Xamarin.Android之布局文件智能提示问题

    一.前言 看到有人问关于xamarin.android的布局没智能提示问题(VS 2015),当然,写布局这东西没提示这是一件相对痛苦的事 ,所以这里就提供一个解决的方案! 二.解决方案 想要智能提示 ...

  6. css3元素简单的闪烁效果(html5 jquery)

    css3 Animation: @-webkit-keyframes twinkling{ /*透明度由0到1*/ 0%{ opacity:0; /*透明度为0*/ } 100%{ opacity:1 ...

  7. php 数组动态添加实现代码(最土团购系统的价格排序)

    最近在实现最土团购系统的价格排序功能,需要对$oc数组进行扩展,经过测试用下面的方法即可. 核心代码如下: <?php $now=time(); $oc = array( 'team_type' ...

  8. ios 学习笔记之控件属性

    1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible;  默认是不带清除属性:Never app ...

  9. MySQL 相关总结

    MySQL 优秀在线教程 RUNOOB-SQL 教程 MySQL 常用命令 导出操作 -- 某数据库 全部表 结构和数据 mysqldump -h192.168.8.152 -uroot -p man ...

  10. UML常用图

    序列图 活动图