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

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

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

    cuiyi's blog(崔毅 crazycy)

    記錄點滴 鑒往事之得失 以資于發展
    數據加載中……

    SQLSERVER: ROWS TO COLUMNS 行轉列 (二)

    Just done by me based on the previous article: SQLServer: Rows to columns

    Use table 
    CREATE TABLE [dbo].[JCDAILYM2MPRICE] (
      [PRICEID] int NOT NULL,
      [VALIDDATE] date NULL,
      [COMMODITYID] varchar(30NULL,
      [PRICE] [DMONEY] NULL,
      [CURRENCYID] char(3NULL,
      [SHIPMONTHNUMBER] int NULL,
      CONSTRAINT [PK_JCDAILYM2MPRICE] PRIMARY KEY CLUSTERED ([PRICEID]));
    1.
    Run the basic query:
    select commodityid, price, shipmonthnumber
    from jcdailym2mprice 
    where validdate='2012-08-31' and commodityid='CR 10'    
    Get the result:

    commodityid

    price

    shipmonthnumber

    CR 10

    2615

    201209

    CR 10

    2615

    201210


    2.
    --hard code as research 1
    select commodityid, 
          case shipmonthnumber when 201209 then isnull(price, 0end as '201209',
          case shipmonthnumber when 201210 then isnull(price, 0end as '201210'
    from jcdailym2mprice 
    where validdate='2012-08-31' and commodityid='CR 10'
    Get the result:

    commodityid

    201209

    201210

    CR 10

    2615

    CR 10

    2615


    3.
    --hard code as research 2
    select  commodityid, sum([201209]as '201209'sum([201210]as '201210'
    from (select commodityid, 
          case shipmonthnumber when 201209 then isnull(price, 0end as '201209',
          case shipmonthnumber when 201210 then isnull(price, 0end as '201210'
          from jcdailym2mprice 
          where validdate='2012-08-31' and commodityid='CR 10') a 
    group by commodityid
    Get the result

    commodityid

    201209

    201210

    CR 10

    2615

    2615


    4.
    --use cursor to dynamic
    declare cur cursor for 
        select monthnumber, '['+convert(varchar(6), monthnumber)+']' from jcshipmonthsmapping 
        where monthnumber>convert(varchar(6), dateadd(month-2getdate()), 112
          and monthnumber<convert(varchar(6), dateadd(month11getdate()), 112)
    declare @yearmonth Integer@columnname varchar(max)
    declare @max varchar(max), @select varchar(max), @sql nvarchar(max)
    set @max=''
    set @select ='select commodityid '
    open cur
    fetch next from cur into @yearmonth,@columnname
    while @@fetch_status=0
    begin
        set @max=@max + ', max(' + @columnname + ') as ' + @columnname
        set @select=@select + ', case when shipmonthnumber=' + convert(varchar(6), @yearmonth+ ' then price end as '+ @columnname
        fetch next from cur into @yearmonth,@columnname
    end
    close cur
    deallocate cur
    set @sql = ' select commodityid ' + @max 
              +' from (' + @select + ' from jcdailym2mprice where validdate=''2012-08-31'') a group by commodityid'
             
    --print @sql
    exec sp_executesql @sql    
    Get the result:

    commodityid

    201209

    201210

    201211

    201212

    201301

    201302

    201303

    201304

    201305

    201306

    201307

    201308

    Brown Crepe 3X

    2650

    CR 10

    2615

    2615

    CR 20

    2610

    2610

    2610

    2610

    2620

    2620

    2620

    2630

    2630

    CSR 10

    2350

    CSR L

    2430

    2435

    SIR 20 S/T BSTN

    2513.2

    SIR 20 S/W

    2513.2

    2529.8

    2535.3

    2540.8

    SIR 20 UG SW

    2513.2

    2529.8

    2535.3

    2540.8

    SKIM BLOCK

    2300


    5.
    --pivot basic
    select commodityid, [201209][201210]
    from (
          select commodityid, price, shipmonthnumber from jcdailym2mprice where validdate='2012-08-31' and commodityid='CR 10'
          ) a 
    pivot ( sum(price) for shipmonthnumber in ([201209][201210])) as pvt
    Get the result

    commodityid

    201209

    201210

    CR 10

    2615

    2615


    6.
    --pivot dynamic
    declare cur cursor for 
    select '['+convert(varchar(6), monthnumber)+']' from jcshipmonthsmapping 
        where monthnumber>convert(varchar(6), dateadd(month-2getdate()), 112
          and monthnumber<convert(varchar(6), dateadd(month11getdate()), 112)
    declare @columns varchar(max), @subjects varchar(max), @sql nvarchar(max
    set @subjects = '[-1]'
    open cur
    fetch next from cur into @columns
    while @@fetch_status=0
    begin
    set @subjects = @subjects + '' + @columns
    fetch next from cur into @columns
    end
    close cur
    deallocate cur
    set @sql = ' select commodityid,' + @subjects 
             + ' from ( select commodityid, price, shipmonthnumber from jcdailym2mprice where validdate=''2012-08-31'' and commodityid=''CR 10'') a'
             + ' pivot(sum(price) for shipmonthnumber in ('+@subjects+')) as pvt'
    --print @sql        
    exec sp_executesql @sql
    Get the result

    commodityid

    -1

    201209

    201210

    201211

    201212

    201301

    201302

    201303

    201304

    201305

    201306

    201307

    CR 10

    2615

    2615



    posted on 2012-10-04 01:33 crazycy 閱讀(2118) 評論(1)  編輯  收藏 所屬分類: JavaEE技術DBMS

    評論

    # re: SQLSERVER: ROWS TO COLUMNS 行轉列 (二)   回復  更多評論   

    Hi Cui Yi

    FYI

    http://www.simple-talk.com/blogs/2007/09/14/pivots-with-dynamic-columns-in-sql-server-2005/
    2012-12-01 20:46 | Qiwen.jiang
    主站蜘蛛池模板: 一级特黄录像免费播放肥| 一个人看的免费视频www在线高清动漫| 精品视频一区二区三区免费| 亚洲人AV永久一区二区三区久久| 噜噜综合亚洲AV中文无码| 日韩a级毛片免费观看| 国产精品亚洲综合久久 | 亚洲精品成a人在线观看☆| 男女超爽刺激视频免费播放| 亚洲美女免费视频| 91成人免费在线视频| 456亚洲人成在线播放网站| 女人18一级毛片免费观看| 亚洲a∨无码精品色午夜| 亚洲?v无码国产在丝袜线观看| 亚洲免费在线观看| 亚洲成AV人片在线观看ww| 99久热只有精品视频免费观看17| 久久水蜜桃亚洲av无码精品麻豆| 国产成人精品免费午夜app| 中文字幕无码亚洲欧洲日韩| 国产免费直播在线观看视频| 黄色视屏在线免费播放| 久久久久久亚洲AV无码专区| 最近中文字幕无吗免费高清| 国产va免费观看| 久久精品国产亚洲一区二区| 99re视频精品全部免费| 午夜亚洲WWW湿好爽 | 国产美女a做受大片免费| 亚洲精品视频免费 | 国产一级理论免费版| 美女无遮挡拍拍拍免费视频| 亚洲综合网美国十次| av成人免费电影| 久久久久亚洲Av无码专| 日本免费一本天堂在线| 天黑黑影院在线观看视频高清免费 | JLZZJLZZ亚洲乱熟无码| 在线免费观看国产| 美女视频黄频a免费大全视频|