[SQL]UNPIVOT 多個欄位
有朋友問「如何直接unpivot成2個欄位」,如下所示,
先準備測試資料如下,
01
|
create table T (
|
02
|
no varchar (10),
|
03
|
yearx varchar (4),
|
04
|
z_type varchar (1),
|
05
|
A01 smallint ,
|
06
|
B01 smallint ,
|
07
|
A02 smallint ,
|
08
|
B02 smallint ,
|
09
|
A03 smallint ,
|
10
|
B03 smallint
|
11
|
)
|
12
|
go
|
13
|
|
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);
|
17
|
|
18
|
SELECT * FROM T;
|
因為原本欄位A01, A02, A03要放到欄位A,B01, B02, B03要放到欄位B,所以需要2個UNPIVOT,如下,
1
|
SELECT no , yearx, z_type, A, B, x1, x2
|
2
|
FROM
|
3
|
( SELECT *
|
4
|
FROM T) p
|
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
|
2
|
FROM
|
3
|
( SELECT *
|
4
|
FROM T) p
|
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 就可以了,如下,
01
|
SELECT *
|
02
|
, ROW_NUMBER() OVER(PARTITION BY no , yearx, z_type ORDER BY no , yearx, z_type) AS SEQX
|
03
|
FROM
|
04
|
(
|
05
|
SELECT no , yearx, z_type, A, B, x1, x2
|
06
|
FROM
|
07
|
( SELECT *
|
08
|
FROM T) p
|
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)
|
12
|
) T2
|
转载于:https://www.cnblogs.com/Nina-piaoye/p/3166794.html
[SQL]UNPIVOT 多個欄位相关推荐
- 如何取得SQL中自增伴位的下一个值
一般來說, 俱有 identity 屬性欄位的 table 的目前值可以很容易地利用 max 函數來取得. 不過, 也很有可能 max 該筆資料已被刪除了, 所以利用 max 查找出來的結果不正確. ...
- 設備(IE01/IE02/IE03)客製欄位及BAPI處理
友人提問:設備(IE01/IE02/IE03)的客製欄位如何用BAPI處理? 以下新增客製欄位用IDES練習 1 找到設備的table EQUI SAP有預留一個customer include CI ...
- 數據移動時發生***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定...
當數據在兩個相同結構的表中移動并且發生: ***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定的錯誤時 用以下方法解決: SET IDENTITY_IN ...
- dpkg: 錯誤: 分析檔案 '/var/lib/dpkg/updates/0001' 的第 0 行附近: 欄位名稱 `#padding' 中有換行
报错如下: dpkg: 錯誤: 分析檔案 '/var/lib/dpkg/updates/0001' 的第 0 行附近: 欄位名稱 `#padding' 中有換行 解决方案: root@ubuntu1 ...
- PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验
PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验 一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL ...
- sqlserver200864位下载_sqlserver2008 64位|sql server 2008 R2 64位企业版下载 - 121下载站
sql server 2008 R2 64位企业版是微软官方发布的64位版本,支持win7.win8等操作系统.sql server 2008 R2是最新版本的数据库软件,可以有效地提升企业内部数据库 ...
- sql取字段前4位_4千左右预算,2020年Word/Excel/用友/ 金蝶/SQL数据库-财务会计轻薄笔记本推荐...
计算机已成为财会岗位必备工具,不仅要懂财务知识,也要会使用各种办公.财务软件. 大学学习会计专业,也要经常处理大量的数据.表格和图表,要装配数据分析软件,首先,需要CPU的运算能力很强,至少4核以上C ...
- oracle中姓名取姓氏,Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字...
有沒有必要創建自己的功能,而且很坦率地說,它似乎浪費了現在可以用已經存在的sql函數很容易地完成這個任務.必須小心處理馬虎數據輸入. 這裏是另一種方式來實現自己的既定目標: with name_lis ...
- PL/SQL Developer如何连接64位的Oracle图解
由于硬件技术的不断更新,Win7系统逐渐成为主流,而且计算机内存逐渐增大,为了充分的利用内存资源(因为32为系统最多只能用到3G左右的内存),提高系统性能,很多人开始使用Win7(64Bit)的系统. ...
最新文章
- VMware Coding Challenge: Possible Scores Summary: static
- 舍选法抽样matlab,12 重要抽样法 | 统计计算
- 开启SAP CDS view DCL前后的读取性能对比
- C++处理一个动态规划的问题
- RPC协议与Web Service
- 在tornado里面使用reverse_url
- 消息中间件常见问题汇总
- c++ primer 6.5.1节练习答案
- 机器学习基础(五十五)—— 核(Kernel Trick)
- JBuilder 2005 Enterprise注册破解
- 不收费的数据恢复软件_有救了!快收好这7个数据恢复神器
- SAP GR/IR在系统AP中收货和校验对会计业务的影响(详细)
- 通信系统、基本原理概念
- 可汗学院-统计学-学习笔记
- 将elf文件转换为bin文件
- 手把手教你搭建高逼格监控平台,动起来吧
- 全局安装vue-cli以及初始化
- 为什么一个手机有两个mac地址?
- (转载)关于C#的fixed
- 2018年个人所得税Excel计算公式
热门文章
- 应用ajax实现检测注册用户名是否已经存在
- 问题 E: Search Problem (II)
- python输出总字符个数_python每次处理固定个数的字符的方法总结
- Python中的石头、剪刀、布游戏
- 带哨兵节点的链_Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)...
- modulenotfounderror python_python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法...
- 去中心化保证金交易平台Lever完成60万美元种子轮融资,NGC Venture等领投
- SAP License:MIRO
- SAP License:PM常用表和字段
- 赛锐信息:SAP的ERP蓝图