逆透視轉換是一種將資料從列的狀態轉換成行的狀態的一種技術。進行逆透視轉換一般要經歷三個邏輯處理階段:生成副本,提取元素和刪除不相關的交叉。
下面是乙個進行逆透視轉換的示例。
use逆透視前:tempdb;
go--
逆透視轉換(列轉行)
--準備測試資料
ifobject_id('
dbo.orders
','u
') is
notnull
drop
table
dbo.orders;
gocreate
table
dbo.orders
( orderid
intnot
null
, orderdate
datetime
notnull
, empid
intnot
null
, custid
varchar(5) not
null
, qty
intnot
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
);
ifobject_id('
dbo.empcustorders
','u
') is
notnull
drop
table
dbo.empcustorders;
goselect
empid,a,b,c,d
into
dbo.empcustorders
from (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
endas
qty
from
dbo.empcustorders
cross
join (select'a
'ascustid
union
allselect'b
'union
allselect'c
'union
allselect'd
') as custs) as
dwhere qty is
notnull;--
2,使用unpivot運算子
select
empid,custid,qty
from
dbo.empcustorders
unpivot (qty
for custid in (a,b,c,d)) as u;
逆透視轉換
逆透視轉換 unpivoting 是一種把資料從列的狀態旋轉為行的狀態的技術。通常,它涉及查詢資料的透視狀態,將來自單個記錄中多個列的值擴充套件為單個列中具有相同值的多個記錄。換句話說,把透視表中的每個源行潛在地轉換成多個行,每行代表源透視表的乙個指定的列值。使用標準sql 進行逆透視轉換 解決方案...
第7章 透視 逆透視及分組集
use tempdb go 第7章 透視 逆透視及分組集 7.1 透視轉換 透視轉換 pivoting 是一種把資料從行的狀態轉換為列的狀態的處理 if object id dbo.orders u is not null drop table dbo.orders create table dbo...
消失點計算 逆透視變換(IPM)
當我們看火車軌道的時候總在某個距離上看到兩條軌道重合到一起後消失。原圖四個點選擇 下面的 是智慧型駕駛系統專案中的原始碼,這裡把opencv中的介面稍微封裝了一下,其中有些與透視變換無關的引數,可以忽略不管 比較重要的一點是 這裡的原圖的四個點是通過車載攝像頭的標定資訊計算出來的,可以通過車載攝像頭...