使用過SQL Server 2000的人都知道,要想實現行列轉換,必須綜合利用聚合函數和動態SQL,具體實現起來須要必定的技巧,而在SQL Server 2005中,使用新引進的關鍵字PIVOT/UNPIVOT,則能夠很容易的實現行列轉換的需求。

在本文中咱們將經過兩個簡單的例子詳細講解PIVOT和UNPIVOT的用法。

PIVOT是行轉列,用法以下: 
假如表結構以下:
      id  name quarter  profile
      1     a        1         1000
      1     a        2         2000
      1     a        3         4000
      1     a        4         5000
      2     b        1         3000
      2     b        2         3500
      2     b        3         4200
      2     b        4         5500
  ----------------------------------------------
     使用PIVOT將四個季度的利潤轉換成橫向顯示:
       select id,name,
             [1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度"
             from test
             pivot
             (
               sum(profile)
               for quarter in ([1],[2],[3],[4])
             )
             as pvt

-----------------------------------------------
 得出的結果以下:
    id  name   一季度  二季度  三季度  四季度
    1     a         1000    2000     4000     5000
    2     b         3000    3500     4200     5500

========================================================================================

UNPIVOT是列轉行,用法以下:
假如表結構以下:
    id   name    Q1        Q2       Q3        Q4                   
    1      a       1000    2000    4000     5000
    2      b       3000    3500    4200     5500
 -----------------------------------------------
    使用UNPIVOT,將同一行中四個季度的列數據轉換成四行數據:
       select id,name,quarter,profile
           from test
           unpivot
           (
              profile
              for quarter in ([Q1],[Q2],[Q3],[Q4])
           )
           as unpvt

-----------------------------------------------
 得出的結果以下:
    id   name   quarter    profile
    1       a         Q1        1000
    1       a         Q2        2000
    1       a         Q3        4000
    1       a         Q4        5000
    2       b         Q1        3000
    2       b         Q2        3500
    2       b         Q3        4200
    2       b         Q4        5500

------------------------------------------------------------------------------

ORACLE縱向錶轉換爲橫向表寫法

設存在以下縱向表,第一列爲id(多是某個業務數據的id),第二列爲類型,第三列爲類型對應的值,以下圖:

如上表,存在2,3,4三種類型,其中業務數據ID爲1的三種類型都有值,業務數據ID爲2的三種類型都有值,業務數據ID爲3的只有類型2和3有值,如今要把縱向表橫過來顯示,能夠採用以下代碼:

  1. -- =========================================================
  2. -- 縱向表變橫向表:
  3. -- 1. 轉換類型,類型的值必須是整數,且不等於0,即0沒有意義,0能夠表示爲空
  4. -- =========================================================
  5. SELECT
  6. t.id,
  7. SUM(DECODE(t.code, 2, 2, 0)) "第二項", -- 若是該行類型爲2則就是2,其它的都爲0
  8. SUM(DECODE(t.code, 3, 3, 0)) "第三項",
  9. SUM(decode(t.code, 4, 4, 0)) "第四項"
  10. FROM ttt t WHERE t.id=1 GROUP BY t.id;
  11. -- =========================================================
  12. -- 縱向表變橫向表:
  13. -- 1. 轉換類型對應的數據,且數據須要是數值,且0沒有意義,即0能夠表示爲空
  14. -- =========================================================
  15. SELECT
  16. t.id,
  17. SUM(DECODE(t.code, 2, t.val, 0)) "第二項", -- 若是該行類型爲2則顯示2類型對應的值DECODE,不然都顯示0
  18. SUM(DECODE(t.code, 3, t.val, 0)) "第三項",
  19. SUM(DECODE(t.code, 4, t.val, 0)) "第四項"
  20. FROM ttt t GROUP BY t.id;

----------------------------------------------------------------------------------------------------------------------------------------

oracle合併列的函數wm_concat的使用詳解

oracle wm_concat(column)函數使咱們常常會使用到的,下面就教您如何使用oracle wm_concat(column)函數實現字段合併,若是您對oracle wm_concat(column)函數使用方面感興趣的話,不妨一看。
shopping:
-----------------------------------------
u_id       goods            num
------------------------------------------
1                蘋果                2
2                 梨子               5
1                 西瓜               4
3                 葡萄               1
3                香蕉                1
1               橘子                 3
=======================
想要的結果爲:
--------------------------------
u_id          goods_sum
____________________
1              蘋果,西瓜,橘子
2              梨子
3              葡萄,香蕉
---------------------------------
1.select u_id, wmsys.wm_concat(goods) goods_sum  2. 3.from shopping  4. 5.group by u_id  
想要的結果2:
--------------------------------
u_id          goods_sum
____________________
1              蘋果(2斤),西瓜(4斤),橘子(3斤)
2              梨子(5斤)
3              葡萄(1斤),香蕉(1斤)
---------------------------------
使用oracle wm_concat(column)函數實現:
select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum  
from shopping  
group by u_id  
mysql---group_concat

SQL(橫表和縱表)行列轉換,PIVOT與UNPIVOT的區別和使用方法舉例,合併列的例子的更多相關文章

    1. 經過sql作數據透視表,數據庫錶行列轉換(pivot和Unpivot用法)(一)

      在mssql中你們都知道可使用pivot來統計數據,實現像excel的透視表功能 一.MSsqlserver中咱們一般的用法 1.Sqlserver數據庫測試 ---建立測試表 Create tab ...

    2. SQL Server中行列轉換 Pivot UnPivot

      SQL Server中行列轉換 Pivot UnPivot PIVOT用於將列值旋轉爲列名(即行轉列),在SQL Server 2000能夠用聚合函數配合CASE語句實現 PIVOT的通常語法是:PI ...

    3. sql 行專列 列轉行 普通行列轉換

      轉載:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行專列 列轉行 普通行列轉換 /* 標題:普通行列轉換 ...

    4. SQL SERVER 合併重複行,行列轉換

      引用自:http://www.cnblogs.com/love-summer/archive/2012/03/27/2419778.html sql server2000 裏面如何實現oracle10 ...

    5. SQL中行列轉換Pivot

      --建表 ),課程 ),分數 int) --插入數據 ) ) ) ) ) ) 1.靜態行轉列(肯定有哪些列) select 姓名, end)語文, end)數學, end)物理 from tb gro ...

    6. 多列的行列轉換(PIVOT,UNPIVOT)

      形式1 形式2 形式3 有時候可能會有這樣的需求: 將一張表的全部列名轉作爲數據的一列數據,將一列數據做爲整張表的列名 當列比較多時,只用PIVOT是解決不了的,通過研究,須要將UNPIVOT 和 P ...

    7. 行列轉換 pivot

      select * from ( select isnull(c.type,'其餘') type,d from ( select ID,Record_code,code,day(thedate) d f ...

    8. sqlserver表分區與調優與行列轉換

      轉自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...

    9. 瑞麗的SQL-SQL Server的表旋轉(行列轉換)

      所謂表旋轉,就是將表的行轉換爲列,或是將表的列轉換爲行,這是從SQL Server 2005開始提供的新技術.所以,若是但願使用此功能,需要將數據庫的兼容級別設置爲90.表旋轉在某些方面也是攻克了表的 ...