Povit 行轉列 與UnPovit 列傳行

2022-08-03 03:24:14 字數 916 閱讀 6280

t-sql語句中,pivot運算子用於在列和行之間對資料進行旋轉或透視轉換,pivot命令可以實現資料表的列轉行,同時執行聚合運算,unpivot則與其相反,實現資料的行轉列。

pivot通過將表示式某一列中的唯一值轉換為輸出中的多個列來旋轉錶值表示式,並在必要時對最終輸出中所需的任何其餘列值執行聚合。unpivot與pivot執行相反的操作,將表值表示式的列轉換為列值。

通俗簡單的說:pivot就是行轉列,unpivot就是列傳行

一 pivot例項

1. 建表

建立乙個銷售情況表,其中,year欄位表示年份,quarter欄位表示季度,amount欄位表示銷售額。quarter欄位分別用q1, q2, q3, q4表示

一、二、三、四季度。

2. 填入表資料

使用如下程式填入表資料。

3. 如果我們要比較每年中各季度的銷售狀況,要怎麼辦呢?有以下兩種方法:

(1)使用傳統select的case語句查詢

在sql server以前的版本裡,將行級資料轉換為列級資料就要用到一系列case語句和聚合查詢。雖然這種方式讓開發人員具有了對所返回資料進行高度控制的能力,但是編寫出這些查詢是一件很麻煩的事情。

得到的結果如下:

(2)使用pivot

由於sql server 2005有了新的pivot運算子,就不再需要case語句和group by語句了。(每個pivot查詢都涉及某種型別的聚合,因此你可以忽略group by語句。)pivot運算子讓我們能夠利用case語句查詢實現相同的功能,但是你可以用更少的**就實現,而且看起來更漂亮。

得到的結果如下:

二 unpivot

1 建表

建立乙個通訊錄表

2. 填入表資料

使用如下程式填入表資料。

3. 使用pivot列轉行

得到的結果如下:

mysql行轉列 subs mysql 行轉列

存在表score,記錄學生的考試成績,如下圖所示 現要求以 學生姓名,語文,數學,英語 這種格式顯示學生成績,如下圖所示 具體步驟如下 1 首先,使用case when函式輸出單個課程的成績 case when course 語文 then score end as 語文 case when cou...

mysql 動態行轉列 MySQL行轉列

比如乙個單子,多個收據單用逗號隔開,怎麼把這乙個單子所有收據單獨展示出來,行轉成列呢?方法一 這裡需要用到迴圈,首先建立乙個1 10的序列 select rownum rownum 1 as seq from select rownum 0 r,bills limit 0,10 其次依次運用 sub...

oracle 行轉列,多行轉列

問題描述 應公司要求,設計功能,乙個id,對應不同的值,展示的時候不同的值拼接展示,如何實現 解決思路 1 拼接字串,想到了 oracle function 這樣肯定能實現,但是比較麻煩 2 oracle 自帶的乙個函式 wm concat 函式 非常給力 上 測試表1 create table c...