有朋友問「如何直接unpivot成2個欄位」,如下所示,

先準備測試資料如下,
14 |
insert into T VALUES('Z01','2012','1',100,-10,200,30,50,60); |
15 |
insert into T VALUES('Z01','2012','3',200,20,100,20,30,40); |
16 |
insert into T VALUES('Z01','2013','3',300,30,10,50,70,30); |

因為原本欄位A01, A02, A03要放到欄位A,B01, B02, B03要放到欄位B,所以需要2個UNPIVOT,如下,
1 |
SELECT no, yearx, z_type, A, B, x1, x2 |
5 |
UNPIVOT ( A FOR x1 IN (A01, A02, A03) )AS UnA |
6 |
UNPIVOT ( B FOR x2 IN (B01, B02, B03) )AS UnB |

上面的輸出筆數為27筆,而我們可以發現,x1, x2欄位中,A01 搭配 B01,A02 要搭配 B02,A03 要搭配 B03,如下圖所示,

所以我們需要再加入 關鍵的 WHERE 條件, RIGHT(x1, 1) = RIGHT(x2, 1),就可以過濾出我們所需要的資料,如下,
1 |
SELECT no, yearx, z_type, A, B, x1, x2 |
5 |
UNPIVOT ( A FOR x1 IN (A01, A02, A03) )AS UnA |
6 |
UNPIVOT ( B FOR x2 IN (B01, B02, B03) )AS UnB |
7 |
WHERE RIGHT(x1, 1) = RIGHT(x2, 1) |

如果要加上序號的話,就加入 ROW_NUMBER 就可以了,如下,
02 |
, ROW_NUMBER() OVER(PARTITION BY no, yearx, z_type ORDER BY no, yearx, z_type) AS SEQX |
05 |
SELECT no, yearx, z_type, A, B, x1, x2 |
09 |
UNPIVOT ( A FOR x1 IN (A01, A02, A03) )AS UnA |
10 |
UNPIVOT ( B FOR x2 IN (B01, B02, B03) )AS UnB |
11 |
WHERE RIGHT(x1, 1) = RIGHT(x2, 1) |

- [Database][SQL] 取得SQLServer中某一欄位名稱所在的資料表及欄位相關資訊
取得SQLServer中某一欄位名稱所在的資料表及欄位相關資訊
- PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验
PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验 一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL ...
- Win8.1OS64位oracle11安装配置及PL/SQL Developer怎样连接64位oracle
Oracle 为什么选择oracle 1.oracle可以在主流的平台上执行,而相对于sql server仅仅支持windows,而windows在wr手里攥着呢,所以你懂的.在安全性上来讲,非常多地 ...
- [ SQLServer ] 數字類型的欄位細節 - 轉載
[MSSQL] 欄位開立(2) - decimal, numeric, float, real, money 的抉擇 https://dotblogs.com.tw/henryli/2015/06/1 ...
- sql 除法运算 保留两位小数
sql 除法运算 保留两位小数 SELECT 1530/60 select cast(1530*1./60 as decimal(18,1))
- [T-SQL] NCL INDEX 欄位選擇效能影響-解析
因為這篇文章寫的比較長一些,我就將總結先列出來 總結 1. 除了WHERE條件外,JOINColumn除了記得建立索引,也要注意到選擇性的高低,如果真的找不到可用的Column,可以考慮在兩邊關聯的表 ...
- PL/SQL Developer如何连接64位的Oracle图解
在64位Win7系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他 ...
- PL/SQL Developer连接本地64位Oracle数据库
1.安装oracle Clinet 首先到Oracle官网上去下载一个Oracle 11g Client(我的是11g的oracle),不过需要先申请一个Oracle 帐号,才能下载. 目前下载地址: ...
- [正确配置]win7 PL/SQL 连接Oralce 11g 64位
PL/SQL 版本号:15.0.5.1710 32位 win7 64位系统 instantclient 12.1 32位,PL/SQL不支持64位 关键问题 1.Not logged on 2.没有c ...
随机推荐
- 基础回顾之List集合
1.List集合的的contains()方法底层调用的是equals()方法,当比较自定义对象时,需要重写比较对象的equals()方法 2.List集合的remove()方法底层依赖的也是equal ...
- Spring MVC 处理列表和数组数据
SpringMVC处理列表和数组类型: 当form提交多个参数时,可以使用@RequestParam(value="")注解将其注入到列表或数组中,否则参数无法传值 1 contr ...
- 第2章 GNS3和PacketTracer网络模拟器(3)_搭建Packet tracer实验环境
3. Packet tracer实验环境 3.1 设置网络拓扑图 (1)配置路由器局域网和广域网接口,如上图(可双击相应的图标,然后在命令行或图形界面上进行IP地址等配置) ①本例采用“Generic ...
- package.json-nodeJs
package.json文件描述了一个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息.格式必须是严格的JSON格式. 通常我们在创建一个NPM程序时,可以使用npm init命令,通过交互 ...
- mono搭建脚本整理
一.介绍 mono项目致力于能够使得开发人员在Linux用C#开发程序. 该项目的目标是创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #编译器和共同语言 ...
- 网页静态处理技术FreeMarker概述
FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅 ...
- 52.纯 CSS 创作一个小球绕着圆环盘旋的动画
原文地址:https://segmentfault.com/a/1190000015295466 感想:重点在小球绕环转动. HTML code: <div class="contai ...
- Mybatis六(SSM框架)
SSM三大框架整合详细教程(SPRING+SPRINGMVC+MYBATIS) 使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么 ...
- django之ReverseOneToOneDescriptor
class ReverseOneToOneDescriptor(object): """ Accessor to the related object on the re ...
- electron 项目的打包方式,以及 jquery 插件的修改使用
< 一 > 应用打包 1,首先确定安装了 node 和 npm 2,全局安装打包依赖 => npm i electron-packager -g 3,打包命令 electron-p ...