<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)
    主站蜘蛛池模板: 今天免费中文字幕视频| 亚洲在成人网在线看| 亚洲综合精品网站| 亚洲国产成人精品91久久久| 免费黄色app网站| 在线a毛片免费视频观看| 免费无码又爽又高潮视频 | 污网站在线免费观看| 国产精品亚洲天堂| 色一情一乱一伦一视频免费看| 苍井空亚洲精品AA片在线播放| 亚洲精品无码国产片| 亚洲国产精品无码中文lv| 亚洲乱码无人区卡1卡2卡3| 亚洲国产无线乱码在线观看| 立即播放免费毛片一级| 成人免费视频一区二区| 中文在线免费不卡视频| 国产成人久久AV免费| 中文字幕在线观看免费视频| 美女视频黄是免费的网址| 免费无码黄动漫在线观看| 亚洲第一区精品观看| 亚洲精品乱码久久久久66| 亚洲视频在线播放| 在线综合亚洲欧洲综合网站 | 亚洲成AV人片在线观看| 777亚洲精品乱码久久久久久 | 国产亚洲精品美女| 国产成人高清精品免费观看| 色www永久免费网站| **一级毛片免费完整视| 最近2019中文字幕免费看最新| 国产精品久久久久影院免费| 亚洲中文字幕伊人久久无码| 亚洲AV成人片色在线观看| 亚洲一区电影在线观看| 精品久久久久久亚洲中文字幕| 国产精品免费久久| 曰批全过程免费视频播放网站| 四虎影院免费在线播放|