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

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

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

    cuiyi's blog(崔毅 crazycy)

    記錄點滴 鑒往事之得失 以資于發(fā)展
    數(shù)據(jù)加載中……

    SQLSERVER: ROWS TO COLUMNS 行轉(zhuǎn)列 (二)

    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 閱讀(2106) 評論(1)  編輯  收藏 所屬分類: JavaEE技術(shù)DBMS

    評論

    # re: SQLSERVER: ROWS TO COLUMNS 行轉(zhuǎn)列 (二)   回復(fù)  更多評論   

    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
    主站蜘蛛池模板: 亚洲欧洲精品久久| 成人黄色免费网址| 理论秋霞在线看免费| 亚洲国产美女精品久久| 亚洲av综合色区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲人成色99999在线观看| 久久精品国产亚洲| 亚洲综合区小说区激情区| 国产高清在线精品免费软件| 波多野结衣在线免费视频| 无码免费一区二区三区免费播放 | 国产v片免费播放| 波多野结衣久久高清免费| 歪歪漫画在线观看官网免费阅读| 最近中文字幕完整免费视频ww| 视频免费在线观看| 中文字幕a∨在线乱码免费看 | 免费看男女下面日出水来| 久艹视频在线免费观看| 久久久WWW免费人成精品| 免费国产在线精品一区 | 亚洲人成无码www久久久| 国产gav成人免费播放视频| 日韩黄色免费观看| 韩国欧洲一级毛片免费| 黄网址在线永久免费观看 | 亚洲精品国产精品乱码不99| 亚洲人成网站色在线入口| 午夜国产大片免费观看| 可以免费观看一级毛片黄a| 国产又长又粗又爽免费视频| 免费鲁丝片一级观看| 女人18毛片水最多免费观看| 成人午夜大片免费7777| 麻豆国产精品入口免费观看| 国产一精品一AV一免费孕妇| 午夜视频在线观看免费完整版| 搡女人真爽免费视频大全| 四虎成人免费影院网址| 国产精品二区三区免费播放心|