<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 渠上月 閱讀(2547) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
    主站蜘蛛池模板: 午夜亚洲www湿好大| 成人毛片18女人毛片免费视频未| 成人自慰女黄网站免费大全 | 国产小视频免费观看| 拍拍拍又黄又爽无挡视频免费| 91精品视频免费| 91香蕉成人免费网站| 久久国内免费视频| 最近最好的中文字幕2019免费| 91情侣在线精品国产免费| 久九九精品免费视频| 无码专区永久免费AV网站| 四虎永久在线精品免费网址| 亚洲的天堂av无码| 亚洲精品视频在线播放| 亚洲人成毛片线播放| 亚洲色无码国产精品网站可下载| 久久精品夜色国产亚洲av| 久久精品国产亚洲| 亚洲天堂电影在线观看| 亚洲不卡影院午夜在线观看| 亚洲成av人片天堂网无码】| 亚洲av无码专区在线电影 | 亚洲第一区香蕉_国产a| 亚洲妓女综合网99| 亚洲乱妇老熟女爽到高潮的片| 国产亚洲精品美女2020久久| 国产男女爽爽爽免费视频| 香蕉成人免费看片视频app下载| 69视频在线观看高清免费| 成人免费在线观看网站| 免费一级毛片清高播放| 国产精品亚洲片在线观看不卡| 亚洲黄色在线网站| 亚洲码欧美码一区二区三区| 四虎影视永久在线精品免费| 久久久久国产免费| 女人被免费视频网站| 青青草原亚洲视频| 亚洲videosbestsex日本| 激情吃奶吻胸免费视频xxxx|