<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      之乎者也,阿彌陀佛

      軟件設計的原則就是,化繁為簡,化難為易,把人的思維集中在簡單的領域,然后通過有序的組合實現復雜的邏輯。

        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      一般我們在使用SQL語句實現行列轉置時候,最常用的方法無外乎就是 case語句來實現,但是如果需要需要轉置的列太多,那么case起來語句就無限龐大,十分不方便,sql server中的PIVOT就可以幫助我們解決此類問題

      PIVOT語法,如下:

      SELECT <non-pivoted column>,
          [first pivoted column] AS <column name>,
          [second pivoted column] AS <column name>,
          ...
          [last pivoted column] AS <column name>
      FROM
          (<SELECT query that produces the data>)
         AS <alias for the source query>
      PIVOT
      (
          <aggregation function>(<column being aggregated>)
      FOR
      [<column that contains the values that will become column headers>]
          IN ( [first pivoted column], [second pivoted column],
          ... [last pivoted column])
      ) AS <alias for the pivot table>
      <optional ORDER BY clause>;

       

      PIVOT語法剖析:

      PIVOT的語法分三層,用三個步驟來使用。
      第一步驟:先把要PIVOT的原始資料查詢(Query)好。
      第二步驟:設定好PIVOT的欄位與方式。
      第三步驟:依PIVOT好了的資料,呈現結果。

      SELECT <non-pivoted column>,    ---- 第三步驟在此,呈現PIVOT後的資料。
          [first pivoted column] AS <column name>,
          [second pivoted column] AS <column name>,
          ...
          [last pivoted column] AS <column name>
      FROM
         (<SELECT query that produces the data>) ---- 第一步驟在此,準備資料(Query)。
         AS <alias for the source query>
      PIVOT ---- 第二步驟在此,依第一步驟的資料欄位來設定PIVOT方式。
      (
          <aggregation function>(<column being aggregated>)
      FOR
      [<column that contains the values that will become column headers>]
          IN ( [first pivoted column], [second pivoted column],
          ... [last pivoted column])
      ) AS <alias for the pivot table>
      <optional ORDER BY clause>;

      用實戰案例說明:

      實戰案例一:

      --## 一維PIVOT 
      目的:統計各狀態(ldap_sts)的數量。
      select *  ---- 第三步:把PIVOT好的資料直接呈現出來。
      from
      (
          select [ldap_id], [ldap_sts] from ccldap   -- 第一步:準備資料。
                -- 只從原資料檔選了兩個欄位,PK欄位(ldap_id)與狀態欄位(ldap_sts)。
      ) S  -- 一定要有,不然會語法錯誤。
      pivot
      (
          count([ldap_id]) -- 統計計數數量
          for [ldap_sts] in ([1],[2],[3],[4],[5],[6],[7])  -- 為欄位[ldap_sts]的狀態值[1][2]…[7]進行統計計算。
      -- 注意:[1][2]…[7]是[ldap_sts]的值,以欄位表示法來描述[ldap_sts]的值。
      ) P  -- 一定要有,不然會語法錯誤。

      下面是執行結果:

      1         2         3         4         5         6         7   <---狀態值
      --------- --------- --------- --------- --------- --------- ---------
      1         12528     68519     120       8         5         36  <---狀態數量

      (1 個資料列受到影響)

      ======================================================
      # 實戰案例二:

      --## 二維PIVOT
      目的:統計不同用途(app_rsn_cod )下,各狀態(ldap_sts)的數量。
      select *  -- 第三步:把PIVOT好的資料直接呈現出來。
      from
      (
          select [ldap_id], [ldap_sts], [app_rsn_cod] from ccldap   -- 第一步:準備資料。
               -- 從原資料檔選了三個欄位,PK欄位(ldap_id)、狀態欄位(ldap_sts)與用途欄位(app_rsn_cod)。
      ) S  -- 一定要有,不然會語法錯誤。
      pivot
      (
          count([ldap_id])-- 統計計數數量
          for [ldap_sts] in ( [1],[2],[3],[4],[5],[6],[7])  -- 為欄位[ldap_sts]的狀態值[1][2]…[7]進行統計計算。
      -- 注意:[1][2]…[7]是[ldap_sts]的值,以欄位表示法來描述[ldap_sts]的值。
      ) P

      下面是執行結果:

      (用途)      (狀態1)   (狀態2)   (狀態3)   (狀態4)   (狀態5)   (狀態6)   (狀態7)  
      app_rsn_cod 1         2         3         4         5         6         7
      ----------- --------- --------- --------- --------- --------- --------- ---------
      NULL        0         12515     59676     0         2         0         0
      1           1         10        8104      1         4         5         0
      2           0         3         739       119       2         0         36

      (3 個資料列受到影響)

      注意到了嗎,在此例的第二步驟,並未設定用途欄位(app_rsn_cod),但在最後的PIVOT結果資料卻神奇的合併(join)成希望達到的效果。

      ## 補充一個應用 on  2013/1/7:

      -- 財產折舊傳票 Query Command.
      DECLARE @ac_yr NCHAR(4);
      SET @ac_yr = '2012';
      SELECT [ac_yr_tw]=Cast(ac_yr - 1911 AS VARCHAR(3))
        ,[tckt_ym]=adg.cvtY4mToY3m(tckt_ym)
        ,[財產預算內],[財產預算外],[實小財產預算內],[軟體預算內],[軟體預算外],[大修預算內],[大修預算外] 
      FROM ( 
        SELECT ac_yr -- key
        ,tckt_ym       -- key
        ,tckt_num     -- measure
        ,[pivot_col]=Case
           When bdg_tpe = 'A' and dpr_grp = 'A' Then '財產預算內' -- pivot column 
           When bdg_tpe = 'B' and dpr_grp = 'A' Then '財產預算外'
           When bdg_tpe = 'A' and dpr_grp = 'B' Then '軟體預算內'
           When bdg_tpe = 'B' and dpr_grp = 'B' Then '軟體預算外'
           When bdg_tpe = 'A' and dpr_grp = 'D' Then '大修預算內'
           When bdg_tpe = 'B' and dpr_grp = 'D' Then '大修預算外'
       End
       FROM gcastdprtckt
       WHERE ac_yr = @ac_yr 
      ) S
      PIVOT
      (
          MAX(tckt_num) -- 其實只會有一筆,但不用aggregation function 不會出現。
          FOR [pivot_col] in ([財產預算內],[財產預算外],[實小財產預算內],[軟體預算內],[軟體預算外],[大修預算內],[大修預算外])
      ) P 

      # 結果象這樣

      每月折舊傳票

      原文轉載:http://rely1020.blog.ithome.com.tw/post/1606/39111

      posted on 2013-10-04 18:14  搏擊的小船  閱讀(4124)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品无码久久久久AV| 伊人久久大香线蕉AV网禁呦| 在线国产精品中文字幕| 中文字幕一区二区三区麻豆| 日韩午夜福利片段在线观看| 97精品人妻系列无码人妻| 久久精品欧美日韩精品| 国产欧美精品一区二区三区| 郴州市| 夜夜躁狠狠躁日日躁| 丰满人妻熟妇乱精品视频| 国产精品国产高清国产一区| 两个人看的www免费视频中文| 久久无码中文字幕免费影院蜜桃| 日韩精品三区二区三区| 美女人妻激情乱人伦| 亚洲精品麻豆一二三区| 国产内射性高湖| 国产97色在线 | 免| 九九成人免费视频| 日本三级理论久久人妻电影| 久热色精品在线观看视频| 福利视频在线播放| 久久99精品中文字幕在| 我国产码在线观看av哈哈哈网站| 极品人妻少妇一区二区| 国产中文字幕精品喷潮| 国产精品自拍视频第一页| 国产亚洲精品综合99久久| 久久99精品久久久久久青青| 狠狠色噜噜狠狠狠888米奇视频| 亚洲综合久久国产一区二区| 久久久无码一区二区三区| 亚洲欧洲日产国码久在线| 国产一区二区在线有码| 玩弄少妇人妻| 国产精品国产三级国产试看| 亚洲性线免费观看视频成熟| 亚洲熟妇色xxxxx亚洲| 内射合集对白在线| 国内少妇人妻偷人精品|