日期:2014-05-18  浏览次数:20514 次

高手进来看一下....急,在线等。放100分啊!!!
数据库中有个以下的表:

表1:

日期/生产量             pro1           pro2       pro3       pro4      
    11月1日                   20                 30         40           50
    11月2日                   28                 30         45           70
    11月3日                   15                 16         20           30
    11月4日                   18                 20         30             4
    11月5日                   12                 13           14         19

表2:
pro1       电脑
pro2       电视
pro3       汽车
pro4       电话


现在要转为下面的表:

产品       11月1日     11月2日     11月3日     11月4日     11月5日

电脑        
电视
汽车
电话

请问怎么转换?

------解决方案--------------------
if object_id( 'pubs..表1 ') is not null
drop table 表1
go
create table 表1(日期 varchar(10),pro1 int,pro2 int,pro3 int,pro4 int)
insert into 表1(日期,pro1,pro2,pro3,pro4) values( '11月1日 ', 20, 30, 40, 50)
insert into 表1(日期,pro1,pro2,pro3,pro4) values( '11月2日 ', 28, 30, 45, 70)
insert into 表1(日期,pro1,pro2,pro3,pro4) values( '11月3日 ', 15, 16, 20, 30)
insert into 表1(日期,pro1,pro2,pro3,pro4) values( '11月4日 ', 18 , 20, 30, 4)
insert into 表1(日期,pro1,pro2,pro3,pro4) values( '11月5日 ', 12 , 13, 14, 19)
go
if object_id( 'pubs..表2 ') is not null
drop table 表2
go
create table 表2(col1 varchar(10),col2 varchar(10))
insert into 表2(col1,col2) values( 'pro1 ', '电脑 ')
insert into 表2(col1,col2) values( 'pro2 ', '电视 ')
insert into 表2(col1,col2) values( 'pro3 ', '汽车 ')
insert into 表2(col1,col2) values( 'pro4 ', '电话 ')
go

select 产品 ,
max(case when 日期 = '11月1日 ' then value else 0 end) as '11月1日 ',
max(case when 日期 = '11月2日 ' then value else 0 end) as '11月2日 ',
max(case when 日期 = '11月3日 ' then value else 0 end) as '11月3日 ',
max(case when 日期 = '11月4日 ' then value else 0 end) as '11月4日 ',
max(case when 日期 = '11月5日 ' then value else 0 end) as '11月5日 '
from
(
select 日期 , 产品 = '电脑 ' , pro1 as value from 表1
union all
select 日期 , 产品 = '电视 ' , pro2 as value from 表1
union all
select 日期 , 产品 = '汽车 ' , pro3 as value from 表1
union all
select 日期 , 产品 = '电话 '