2013-07-27 53 views
0

我从我的查询表中的结果是如下透视表视图2005

company1 company2 year revenue 
--------------------------------- 
A1  B1  2000 1000 
B1  A1  2001 2000 
A1  C1  2000 1500 
C1  A1  2001 1400 

我想从该表中以下视图的创建yearwise单独的数据透视表

对于2000

A1 B1  C1 
A1  1000 1500 
B1 1000 
C1 1500 

对于2001年

A1 B1  C1 
A1  2000 1400 
B1 2000 
C1 1400 

有人可以建议一个查询来自动化结果或可用于获得结果的通用查询。

回答

0

试试这个。这是简单的一点点,但工作:)

create table my_query (
    company1 nvarchar(100), 
    company2 nvarchar(100), 
    [year] int, 
    revenue int, 
); 

insert into my_query (company1, company2, [year], revenue) values ('A1', 'B1', 2000, 1000); 
insert into my_query (company1, company2, [year], revenue) values ('B1', 'A1', 2001, 2000); 
insert into my_query (company1, company2, [year], revenue) values ('A1', 'C1', 2000, 1500); 
insert into my_query (company1, company2, [year], revenue) values ('C1', 'A1', 2001, 1400); 

---------------------------------------------------------------- 
create procedure yearwise 
    @year int 
as 
begin 
    declare @code nvarchar(max); 
    set @code = ''; 

    select @code = @code + [code] from (
     select 'select src.company' [code], 1 [sort] 
     union 
     select ', (select sum(revenue) [sum] from my_query where [year] = '+cast(@year as nvarchar)+' and ((company1 = src.company and company2 = '''+company1+''') or (company1 = '''+company1+''' and company2 = src.company))) ['+company1+']', 2 from my_query 
     union 
     select 'from (select company1 [company] from my_query union select company2 from my_query) as src', 3 
    ) as tbl 
    order by [sort] 

    exec (@code); 
end 
---------------------------------------------------------------- 

exec yearwise @year = 2001 

结果

company A1  B1  C1 
---------------------------- 
A1  NULL 2000 1400 
B1  2000 NULL NULL 
C1  1400 NULL NULL