逆透視轉換(unpivoting)是一種把資料從列的狀態旋轉為行的狀態的技術。通常,它涉及查詢資料的透視狀態,將來自單個記錄中多個列的值擴充套件為單個列中具有相同值的多個記錄。換句話說,把透視表中的每個源行潛在地轉換成多個行,每行代表源透視表的乙個指定的列值。
使用標準sql 進行逆透視轉換
解決方案的第一步是根據**表的每一行生成多個副本(為需要逆透視的每個列生成乙個副本)。
select *
from (select empid,custid,
case custid
when 'a' then a
when 'b' then b
end as qty
from dbo.empcustorders
cross join (values('a『),('b')) as custs(custid) as d
where qty is not null ;
使用 t-sql 的unpivot 運算子進行逆透視轉換
對資料進行逆透視轉換時,會為源表中想要進行逆透視的任意列生成兩個結果列。
與pivot 運算子類似。unpivot 也是作為表運算子,在from 子句的上下文中執行操作。它的操作物件是源表或表表示式。在unpivot去處符的圓括號中需要指定的內容包括:用於儲存源表列值的目標列名,以及源表的列名列表。在unpivot 運算子的圓括號的後面,可以為表運算子的結果表提供乙個別名。\
select col1,col2,col3
from (
select 'a' as col1,'2' as b,'3' as c ) as t
unpivot (col3 for col2 in (b,c)) as unp
注意:unpivot 運算子會執行與前面介紹的邏輯處理階段相同的幾個步驟:生成副本、提取元素和刪除交叉位置上的null值。與基於標準sql 的解決方案相比,unpivot 的最後乙個階段是不可選的。
還要注意,對經過透視轉換所得的表再進行逆透視轉換,並不能得到原來的表。因為逆透視轉換只是把經過透視轉換後的值再旋轉到另一種新的格式。但是,經過逆透視轉換後的表可以再通過透視轉換回到原來的狀態。換句話說,透視轉換中的聚合操作會丟失掉源表中的詳細資訊。經過透視轉換後,儲存下來的只是操作之間的所有聚合結果,而逆透視轉換則不會丟失任何資訊。
逆透視轉換
逆透視轉換是一種將資料從列的狀態轉換成行的狀態的一種技術。進行逆透視轉換一般要經歷三個邏輯處理階段 生成副本,提取元素和刪除不相關的交叉。下面是乙個進行逆透視轉換的示例。use tempdb go 逆透視轉換 列轉行 準備測試資料 ifobject id dbo.orders u is notnul...
第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中的介面稍微封裝了一下,其中有些與透視變換無關的引數,可以忽略不管 比較重要的一點是 這裡的原圖的四個點是通過車載攝像頭的標定資訊計算出來的,可以通過車載攝像頭...