博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逆透视转换
阅读量:6644 次
发布时间:2019-06-25

本文共 1690 字,大约阅读时间需要 5 分钟。

逆透视转换是一种将数据从列的状态转换成行的状态的一种技术。进行逆透视转换一般要经历三个逻辑处理阶段:生成副本,提取元素和删除不相关的交叉。

下面是一个进行逆透视转换的示例。

USE tempdb;GO-- 逆透视转换(列转行)-- 准备测试数据IF OBJECT_ID('dbo.Orders','U') IS NOT NULL DROP TABLE dbo.Orders;GOCREATE TABLE dbo.Orders(    orderid INT NOT NULL,    orderdate DATETIME NOT NULL,    empid INT NOT NULL,    custid VARCHAR(5) NOT NULL,    qty INT NOT NULL,    CONSTRAINT PK_Orders PRIMARY KEY(orderid));INSERT INTO dbo.Orders(orderid,orderdate,empid,custid,qty) VALUES     (30001,'20070802',3,'A',10),    (10001,'20071224',2,'A',12),    (10005,'20071224',1,'B',20),    (40001,'20080109',2,'A',40),    (10006,'20080118',1,'C',14),    (20001,'20080212',2,'B',12),    (40005,'20090212',3,'A',10),    (20002,'20090216',1,'C',20),    (30003,'20090418',2,'B',15),    (30004,'20070418',3,'C',22),    (30007,'20090907',3,'D',30);    IF OBJECT_ID('dbo.EmpCustOrders','U') IS NOT NULL DROP TABLE dbo.EmpCustOrders;GOSELECT empid,A,B,C,DINTO dbo.EmpCustOrdersFROM (SELECT empid,custid,qty FROM dbo.Orders) AS DPIVOT(SUM(D.qty) FOR D.custid IN (A,B,C,D)) AS P;SELECT * FROM dbo.EmpCustOrders;

逆透视前:

逆透视也有两种解决方案,一是使用标准SQL,另一种是使用UNPIVOT运算符。下面是示例代码。

-- 1,使用标准SQL-- 交叉联接,派生表SELECT * FROM (SELECT empid,custid,        CASE custid            WHEN 'A' THEN A            WHEN 'B' THEN B            WHEN 'C' THEN C            WHEN 'D' THEN D        END AS qty         FROM dbo.EmpCustOrders            CROSS JOIN (SELECT 'A' AS custid                        UNION ALL SELECT 'B'                        UNION ALL SELECT 'C'                        UNION ALL SELECT 'D') AS Custs) AS DWHERE qty IS NOT NULL;-- 2,使用UNPIVOT运算符SELECT empid,custid,qty FROM dbo.EmpCustOrdersUNPIVOT (qty FOR custid IN (A,B,C,D)) AS U;

逆透视后的效果如下图。

转载地址:http://nxevo.baihongyu.com/

你可能感兴趣的文章
盘点水平垂直的几种方式
查看>>
设置淘宝镜像
查看>>
剑指offer面试题48: 最长不含重复字符的子字符串
查看>>
tomcat报错相关问题
查看>>
usermod更改用户家目录
查看>>
Excel累加上一行的数值
查看>>
关于盒模型的一个CSS3样式
查看>>
CATALINA_BASE与CATALINA_HOME的区别
查看>>
简单的mvvm light 应用
查看>>
关于IE浏览器里修改元素style属性的问题
查看>>
什么是PT,PT和BT有什么不同?
查看>>
mac操作快捷键
查看>>
Ubuntu16.04安装RoboCup3D比赛的仿真平台
查看>>
Android重写getResources规避用户调整系统字体大小影响Android屏幕适配
查看>>
C#委托-事件示例
查看>>
3DES 加密 解密
查看>>
python中pydoc用法
查看>>
笔试题(企鹅)
查看>>
设计模式 — 模板模式
查看>>
重审自己
查看>>