SQL行转列

  • 格式:pdf
  • 大小:28.66 KB
  • 文档页数:2

SQL⾏转列

SQL⾏转列是⽐较经典的问题:

⽐如有如下数据表,有如下某⼀款号(表1): 颜⾊ 尺码 库存

红⾊ S 10

红⾊ M 80

⽩⾊ L 50

⽩⾊ S 60

要将上⾯的表转化为如下格式(表2):

颜⾊ S M L

红⾊ 10 80 0

⽩⾊ 60 0 50

动态sql:create table #tbl_0

(

color nvarchar(12),

nsize nchar(1),

store int

)

insert into #tbl_0

select 'red', 'S', '10' union all

select 'red', 'M', '80' union all

select 'white', 'L', '50' union all

select 'white', 'S', '60'

select * from #tbl_0

--结果

--red S 10

--red M 80

--white L 50

--white S 60

declare @sql varchar(4000)

set @sql = ' select color,'

select @sql= @sql+'isnull(sum(case nsize when '''+ns+''' then isnull(store,0) end),0) '''+ns+''','

from (select 'S' as ns union all select 'M' union all select 'L') a

set @sql = stuff(@sql,len(@sql),1,'')

set @sql=@sql+ ' from #tbl_0 group by color'exec(@sql)

--结果

--red 10 80 0

--white 60 0 50

drop table #tbl_0

静态sql:select color,

isnull(sum(case nsize when 'S' then isnull(store,0) end),0) 'S',

isnull(sum(case nsize when 'M' then isnull(store,0) end),0) 'M',

isnull(sum(case nsize when 'L' then isnull(store,0) end),0) 'L'

from #tbl_0 group by color