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

先準備測試資料如下,

view source print?
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,如下,

view source print?
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),就可以過濾出我們所需要的資料,如下,

view source print?
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 就可以了,如下,

view source print?
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 多個欄位相关推荐

  1. 如何取得SQL中自增伴位的下一个值

    一般來說, 俱有 identity 屬性欄位的 table 的目前值可以很容易地利用 max 函數來取得. 不過, 也很有可能 max 該筆資料已被刪除了, 所以利用 max 查找出來的結果不正確. ...

  2. 設備(IE01/IE02/IE03)客製欄位及BAPI處理

    友人提問:設備(IE01/IE02/IE03)的客製欄位如何用BAPI處理? 以下新增客製欄位用IDES練習 1 找到設備的table EQUI SAP有預留一個customer include CI ...

  3. 數據移動時發生***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定...

    當數據在兩個相同結構的表中移動并且發生: ***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定的錯誤時 用以下方法解決: SET IDENTITY_IN ...

  4. dpkg: 錯誤: 分析檔案 '/var/lib/dpkg/updates/0001' 的第 0 行附近: 欄位名稱 `#padding' 中有換行

    报错如下: dpkg: 錯誤: 分析檔案 '/var/lib/dpkg/updates/0001' 的第 0 行附近:  欄位名稱 `#padding' 中有換行 解决方案: root@ubuntu1 ...

  5. PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验

    PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验 一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL ...

  6. sqlserver200864位下载_sqlserver2008 64位|sql server 2008 R2 64位企业版下载 - 121下载站

    sql server 2008 R2 64位企业版是微软官方发布的64位版本,支持win7.win8等操作系统.sql server 2008 R2是最新版本的数据库软件,可以有效地提升企业内部数据库 ...

  7. sql取字段前4位_4千左右预算,2020年Word/Excel/用友/ 金蝶/SQL数据库-财务会计轻薄笔记本推荐...

    计算机已成为财会岗位必备工具,不仅要懂财务知识,也要会使用各种办公.财务软件. 大学学习会计专业,也要经常处理大量的数据.表格和图表,要装配数据分析软件,首先,需要CPU的运算能力很强,至少4核以上C ...

  8. oracle中姓名取姓氏,Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字...

    有沒有必要創建自己的功能,而且很坦率地說,它似乎浪費了現在可以用已經存在的sql函數很容易地完成這個任務.必須小心處理馬虎數據輸入. 這裏是另一種方式來實現自己的既定目標: with name_lis ...

  9. PL/SQL Developer如何连接64位的Oracle图解

    由于硬件技术的不断更新,Win7系统逐渐成为主流,而且计算机内存逐渐增大,为了充分的利用内存资源(因为32为系统最多只能用到3G左右的内存),提高系统性能,很多人开始使用Win7(64Bit)的系统. ...

最新文章

  1. VMware Coding Challenge: Possible Scores Summary: static
  2. 舍选法抽样matlab,12 重要抽样法 | 统计计算
  3. 开启SAP CDS view DCL前后的读取性能对比
  4. C++处理一个动态规划的问题
  5. RPC协议与Web Service
  6. 在tornado里面使用reverse_url
  7. 消息中间件常见问题汇总
  8. c++ primer 6.5.1节练习答案
  9. 机器学习基础(五十五)—— 核(Kernel Trick)
  10. JBuilder 2005 Enterprise注册破解
  11. 不收费的数据恢复软件_有救了!快收好这7个数据恢复神器
  12. SAP GR/IR在系统AP中收货和校验对会计业务的影响(详细)
  13. 通信系统、基本原理概念
  14. 可汗学院-统计学-学习笔记
  15. 将elf文件转换为bin文件
  16. 手把手教你搭建高逼格监控平台,动起来吧
  17. 全局安装vue-cli以及初始化
  18. 为什么一个手机有两个mac地址?
  19. (转载)关于C#的fixed
  20. 2018年个人所得税Excel计算公式

热门文章

  1. 应用ajax实现检测注册用户名是否已经存在
  2. 问题 E: Search Problem (II)
  3. python输出总字符个数_python每次处理固定个数的字符的方法总结
  4. Python中的石头、剪刀、布游戏
  5. 带哨兵节点的链_Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)...
  6. modulenotfounderror python_python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法...
  7. 去中心化保证金交易平台Lever完成60万美元种子轮融资,NGC Venture等领投
  8. SAP License:MIRO
  9. SAP License:PM常用表和字段
  10. 赛锐信息:SAP的ERP蓝图