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

报表分析,该如何处理

2011-12-28 
报表分析 我有一张表A序号品名数量日期1产品1202006-12-92产品1102006-12-153产品2152006-11234产品312200

报表分析

我有一张表A
序号       品名       数量     日期
1             产品1       20         2006-12-9
2             产品1       10         2006-12-15
3             产品2       15         2006-11   23
4             产品3       12         2006-11-24
5             产品4       10         2007-01-4
6             产品6       10         2007-01-8
7             产品6       15         2007-01-7

我用SQL按月份累加了
select   品名,数量=sum(数量,DATEPART(month,   日期)   as   月份   from   A   group   by   品名,DATEPART(month,   开单日期)
效果如下:
序号       品名     数量       月份
1             产品1       30           12
2             产品2       15           11
3             产品3       12           11
4             产品4       10           1
5             产品6       25           1      
我现在想输入格式为:
品名       12月份       11月份         1月份
产品1       30               0                   0
产品2         0               15                 0
产品3         0               12                 0
产品4         0               0                   10
产品6         0               0                   25
请问这样的SQL要怎么写?
不知在C#里用水晶报表能否做到?

[解决办法]
create table tab
(
DateClass varchar(10),
Class varchar(20),
count varchar(20)
)
insert into tab select '产品1 ', '30 ', '12 '
insert into tab select '产品2 ', '15 ', '11 '
insert into tab select '产品3 ', '12 ', '11 '
insert into tab select '产品4 ', '10 ', '1 '
insert into tab select '产品5 ', '25 ', '1 '


--语句
declare @sql varchar(2000)
set @sql = 'select DateClass '

select @sql = @sql + ',sum(case count when ' ' '+a.count+ ' ' ' then class else 0 end )as [ '+a.count+ '月] '
from (select distinct count from tab)a

set @sql = @sql + ' from tab group by DateClass '

exec(@sql)
[解决办法]
create table A(序号 int, 品名 nvarchar(10), 数量 int, 日期 datetime)


insert A select 1, '产品1 ', 20, '2006-12-9 '
union all select 2, '产品1 ', 10, '2006-12-15 '
union all select 3, '产品2 ', 15, '2006-11-23 '
union all select 4, '产品3 ', 12, '2006-11-24 '
union all select 5, '产品4 ', 10, '2007-01-4 '
union all select 6, '产品6 ', 10, '2007-01-8 '
union all select 7, '产品6 ', 15, '2007-01-7 '

declare @sql varchar(8000)
set @sql= 'select 品名, '
select @sql=@sql+quotename(日期)+ '=sum(case when convert(char(7), 日期, 120)= '+quotename(日期, ' ' ' ')+ ' then 数量 else 0 end), ' from
(
select 日期=convert(char(7), 日期, 120)
from A
group by convert(char(7), 日期, 120)
)tmp
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from A group by 品名 '
exec(@sql)

--result
品名 2006-11 2006-12 2007-01
---------- ----------- ----------- -----------
产品1 0 30 0
产品2 15 0 0
产品3 12 0 0
产品4 0 0 10
产品6 0 0 25

热点排行