首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 复杂有关问题求解

2012-01-23 
SQL 复杂问题求解?现在有一张表:   按进口日期查询:FROMDATE:2007-01-01TODATE:2007-04-01结果为:    公司

SQL 复杂问题求解?
现在有一张表:
   按进口日期查询:     FROM   DATE:       2007-01-01           TO   DATE:       2007-04-01  
结果为:
    公司名  出口  进口  
     A      100        150   
     B      200          50
     C      150        150
     D      380        650
     E      260        450
     F      180          70


现在要求:同样按进口日期查询:     FROM   DATE:       2007-01-01           TO   DATE:       2007-04-01      
    显示的结果为:

  公司名 一月出口 一月进口 二月出口 二月进口 三月出口 三月出口
   A      10         50    60                 70                       30               30
   B      100          20                 30                 10                       70               20  
   C      50         10                 30                 100                     70               40
   D      180       350               120               150                     80               150  
   E      60          150               150               230                     50               70
   F      80            20                 60                 10                       40               40


该怎么做呢?如果有什么地方不清楚可以联系我?谢谢了
   


[解决办法]
create table temp49(id varchar(10),import int ,export int,cdate datetime)

insert into temp49
select 'A ',10,50, '2007-04-01 '
union all select 'A ',60,70, '2007-02-01 '
union all select 'A ',30,30, '2007-03-01 '
union all select 'B ',100,20, '2007-01-01 '
union all select 'B ',30,100, '2007-02-01 '
union all select 'B ',70,20, '2007-03-01 '
union all select 'C ',50,10, '2007-01-01 '
union all select 'C ',30,100, '2007-02-01 '
union all select 'C ',70,40, '2007-03-01 '
union all select 'D ',180,350, '2007-01-01 '
union all select 'D ',120,150, '2007-02-01 '
union all select 'D ',80,150, '2007-03-01 '
union all select 'E ',60,150, '2007-01-01 '
union all select 'E ',150,230, '2007-02-01 '
union all select 'E ',50,70, '2007-03-01 '
union all select 'F ',80,20, '2007-01-01 '


union all select 'F ',60,10, '2007-02-01 '
union all select 'F ',40,40, '2007-03-01 '


select id,sum(import) import,sum(export) export,month(cdate) cdate into #temp
from temp49
group by id, month(cdate)

declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ', ' ' '+cast(cdate as varchar(10))+ '月进口 ' '=sum( case when cdate= '+cast(cdate as varchar(10))+ ' then import end), ' ' '+cast(cdate as varchar(10))+ '月出口 ' '=sum( case when cdate= '+cast(cdate as varchar(10))+ ' then export end) '
from #temp group by cdate
set @sql=stuff(@sql,1,1, ' ')
set @sql= 'select id, '+@sql+ ' from #temp group by id '
--print @sql
exec(@sql)



[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(公司名 varchar(10),出口 int,进口 int,时间 datetime)
insert into tb(公司名,出口,进口,时间) values( 'A ',10 ,50 , '2007-01-01 ')
insert into tb(公司名,出口,进口,时间) values( 'A ',60 ,70 , '2007-02-01 ')
insert into tb(公司名,出口,进口,时间) values( 'A ',30 ,30 , '2007-03-01 ')
insert into tb(公司名,出口,进口,时间) values( 'B ',100 ,20 , '2007-01-01 ')
insert into tb(公司名,出口,进口,时间) values( 'B ',30 ,10 , '2007-02-01 ')
insert into tb(公司名,出口,进口,时间) values( 'B ',70 ,20 , '2007-03-01 ')
insert into tb(公司名,出口,进口,时间) values( 'C ',50 ,10 , '2007-01-01 ')
insert into tb(公司名,出口,进口,时间) values( 'C ',30 ,100, '2007-02-01 ')
insert into tb(公司名,出口,进口,时间) values( 'C ',70 ,40 , '2007-03-01 ')
insert into tb(公司名,出口,进口,时间) values( 'D ',180 ,350, '2007-01-01 ')
insert into tb(公司名,出口,进口,时间) values( 'D ',120 ,150, '2007-02-01 ')
insert into tb(公司名,出口,进口,时间) values( 'D ',80 ,150, '2007-03-01 ')
insert into tb(公司名,出口,进口,时间) values( 'E ',60 ,150, '2007-01-01 ')
insert into tb(公司名,出口,进口,时间) values( 'E ',150 ,230, '2007-02-01 ')
insert into tb(公司名,出口,进口,时间) values( 'E ',50 ,70 , '2007-03-01 ')
insert into tb(公司名,出口,进口,时间) values( 'F ',80 ,20 , '2007-01-01 ')
insert into tb(公司名,出口,进口,时间) values( 'F ',60 ,10 , '2007-02-01 ')
insert into tb(公司名,出口,进口,时间) values( 'F ',40 ,40 , '2007-03-01 ')
go

declare @sql varchar(8000)
set @sql = 'select 公司名 '
select @sql = @sql + ' , max(case convert(varchar(7),时间,120) when ' ' ' + 月份 + ' ' ' then 出口 end) [ ' + 月份 + '月出口 ' + '] '
+ ' , max(case convert(varchar(7),时间,120) when ' ' ' + 月份 + ' ' ' then 进口 end) [ ' + 月份 + '月进口 ' + '] '
from (select distinct convert(varchar(7),时间,120) as 月份 from tb) as a
set @sql = @sql + ' from tb group by 公司名 '
exec(@sql)

drop table tb

/*
公司名 2007-01月出口 2007-01月进口 2007-02月出口 2007-02月进口 2007-03月出口 2007-03月进口
------ ------------- ------------- ------------- ------------- ------------- -----------
A 10 50 60 70 30 30
B 100 20 30 10 70 20
C 50 10 30 100 70 40
D 180 350 120 150 80 150
E 60 150 150 230 50 70
F 80 20 60 10 40 40


*/

热点排行