<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks
    轉貼:

    SQL Server2005引入了很多迎合開發者口味的新特性,雖然改動不大,卻大大了減少了開發者的工作量,這種替用戶考慮的開發思路,值得稱贊。

    在SQL Server2000中,要實現行列轉換,需要綜合利用聚合函數和動態SQL,實現起來需要一定的技巧,所以在CSDN的SQL討論區里可以看到大量詢問行列轉換如何實現的問題。到了2005中,使用新引進的關鍵字PIVOT/UNPIVOT,可以輕松實現行列轉換的需求。

    好像Oracle11g也準備引入PIVOT/UNPIVOT特性,對于Oracle開發來說,It''s a good news。

    本文通過兩個簡單的例子展示PIVOT/UNPIVOT的用法。詳細的語法請參考聯機幫助。



    PIVOT

    創建測試表,插入測試數據

    create table test(id int,name varchar(20),quarter int,profile int)
    insert into test values(1,''a'',1,1000)
    insert into test values(1,''a'',2,2000)
    insert into test values(1,''a'',3,4000)
    insert into test values(1,''a'',4,5000)
    insert into test values(2,''b'',1,3000)
    insert into test values(2,''b'',2,3500)
    insert into test values(2,''b'',3,4200)
    insert into test values(2,''b'',4,5500)

    select * from test
    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

    (8 row(s) affected)

    利用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

    (2 row(s) affected)

    UNPIVOT

    建立測試表,插入測試數據

    drop table test

    create table test(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)

    insert into test values(1,''a'',1000,2000,4000,5000)
    insert into test values(2,''b'',3000,3500,4200,5500)


    select * from test

    id name Q1 Q2 Q3 Q4
    ----------- -------------------- ----------- ----------- ----------- -----------
    1 a 1000 2000 4000 5000
    2 b 3000 3500 4200 5500

    (2 row(s) affected)

    利用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

    (8 row(s) affected)
    posted on 2008-08-20 15:02 渠上月 閱讀(2543) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
    主站蜘蛛池模板: 国产成人亚洲精品| 国产亚洲精品美女| 国产伦一区二区三区免费 | 亚洲黄片手机免费观看| a级黄色毛片免费播放视频| 亚洲国产综合人成综合网站00| 国产猛烈高潮尖叫视频免费| 两个人看的www免费高清| 亚洲入口无毒网址你懂的| 亚洲精品综合久久| 免费看片在线观看| 亚洲阿v天堂在线2017免费| 亚洲日本香蕉视频| 亚洲人成国产精品无码| 午夜免费1000部| 成在线人直播免费视频| 亚洲经典在线观看| 亚洲国产综合人成综合网站| 亚洲一区免费视频| 男女拍拍拍免费视频网站| 77777午夜亚洲| 亚洲国产精品久久久久| 免费人成在线观看网站视频 | 亚洲人成无码网站久久99热国产| 久久国产免费观看精品3| 猫咪免费人成网站在线观看入口| 亚洲日韩乱码中文无码蜜桃 | 国产成人啪精品视频免费网| 97免费人妻在线视频| 一区二区免费国产在线观看 | WWW国产亚洲精品久久麻豆| 亚洲国产成人久久精品影视| 亚洲AV永久无码精品一区二区国产| h视频在线免费看| 久操视频在线免费观看| 人成免费在线视频| 亚洲а∨精品天堂在线| 亚洲一区二区影视| 久久国产精品亚洲综合 | 亚洲欧洲精品久久| 亚洲乱码一区二区三区在线观看|