日期:2014-05-19  浏览次数:20567 次

求一SQL语句!
表A
    F_code                 F_Area
        001                     A区
        002                     B区
        003                     C区
        004                     D区

表B
    F_bookdate                           F_Areacode             F_Nums  
2004-10-20   12:50:00               001                           10
2004-10-20   12:50:00               002                           20
2004-10-21   12:50:00               003                           40
2004-10-21   12:50:00               004                           60

统计后的结果为:

      日期             A区             B区               C区             D区
2004-10-20         10               20               0                   0
2004-10-21         0                 0               40                   60

请大家帮忙看看!        


------解决方案--------------------

create table A(F_code char(3), F_Area nvarchar(20))
insert A select '001 ', 'A区 '
union all select '002 ', 'B区 '
union all select '003 ', 'C区 '
union all select '004 ', 'D区 '

create table B(F_bookdate datetime, F_Areacode char(3), F_Nums int)
insert B select '2004-10-20 12:50:00 ', '001 ', 10
union all select '2004-10-20 12:50:00 ', '002 ', 20
union all select '2004-10-21 12:50:00 ', '003 ', 40
union all select '2004-10-21 12:50:00 ', '004 ', 60

declare @sql varchar(8000)
set @sql= 'select F_bookdate, '
select @sql=@sql+quotename(F_Area)+ '=sum(case when F_Areacode= '+quotename(F_code, ' ' ' ')+ ' then F_Nums else 0 end), '
from A
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from B group by F_bookdate '
exec(@sql)

--result
F_bookdate A区 B区 C区 D区
------------------------------------------------------ ----------- ----------- ----------- -----------
2004-10-20 12:50:00