SQL2005實現行轉成列

2021-04-28 06:21:05 字數 2382 閱讀 7941

/*參考 愛新覺羅.毓華

時間            值

2009-01-01      90

2009-01-02      99

2009-02-01      95

得到如下結果:

mycol  200901  200902

----- ------- -------

mycol  189      95

---------------------

*/create table #mytb(time datetime,value float)

insert into #mytb values('2009-01-01',90)

insert into #mytb values('2009-01-05',80)

insert into #mytb values('2009-02-01',90)

insert into #mytb values('2009-03-01',88)

insert into #mytb values('2009-04-01',91)

insert into #mytb values('2009-05-01',92)

insert into #mytb values('2009-06-01',95)

insert into #mytb values('2009-07-01',97)

insert into #mytb values('2009-08-01',99)

insert into #mytb values('2009-09-01',86)

insert into #mytb values('2009-10-01',85)

insert into #mytb values('2009-11-01',88)

insert into #mytb values('2009-12-01',87)

insert into #mytb values('2009-12-01',80)

insert into #mytb values('2009-02-01',89)

--建立臨時表

create table #tb(yyyymm varchar(6),value float,mycol varchar(5))

insert into #tb select year(time)*100+month(time),value,'mycol' from #mytb

--動態實現行轉成列

declare @sql varchar(8000)

set @sql='select mycol '

select @sql=@sql+','+quotename(yyyymm)+'=sum(case yyyymm when '''+yyyymm+''' then value else 0 end)'

from (select distinct(yyyymm) from #tb) a

exec(@sql+' from #tb group by mycol')

--靜態實現

select

sum(case when yyyymm='200901' then value else 0 end) '一月',

sum(case when yyyymm='200902' then value else 0 end) '二月',

sum(case when yyyymm='200903' then value else 0 end) '三月',

sum(case when yyyymm='200904' then value else 0 end) '四月',

sum(case when yyyymm='200905' then value else 0 end) '五月',

sum(case when yyyymm='200906' then value else 0 end) '六月',

sum(case when yyyymm='200907' then value else 0 end) '七月',

sum(case when yyyymm='200908' then value else 0 end) '八月',

sum(case when yyyymm='200909' then value else 0 end) '九月',

sum(case when yyyymm='200910' then value else 0 end) '十月',

sum(case when yyyymm='200911' then value else 0 end) '11月',

sum(case when yyyymm='200912' then value else 0 end) '12月'

from #tb

drop table #mytb

drop table #tb

SQL2005語句實現行轉列,列轉行

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。引用msdn 可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。...

SQL2005語句實現行轉列,列轉行

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。引用msdn 可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。...

SQL2005的資料轉成SQL2000

直接restore或附加應該是不行的,用指令碼 導資料肯定沒有問題。2005轉到2000的步驟 1.生成for 2000版本的資料庫指令碼 2005 的manger studio 開啟 物件資源管理器 沒有的話按f8 連線到你的例項 右鍵要轉到2000的庫 任務 生成指令碼 在 指令碼嚮導 的 選擇...