select 销售小组, sum(产品1金额) as 产品1销售金额, sum(产品2金额) as 产品2销售金额, sum(合同1) as 合同1签约数, (sum(产品1金额)+sum(产品2金额))/10000+sum(合同1数) as 得分 from report where 合同1=‘有效’ group by 销售小组 having
select 组别,sum(isnull(产品1金额,0)) as 产品1金额, sum(isnull(产品2金额,0)) as 产品2金额, sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量, sum(产品1金额+产品2金额)得分 from report group by 组别
select 组别,sum(isnull(产品1金额,0)) as 产品1金额, sum(isnull(产品2金额,0)) as 产品2金额, sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量, sum(产品1金额+产品2金额+(case when 合同1='有效' then 1 else 0 end))得分 from report group by 组别
有门!!得分中还少个“合同有效”的计算,改成: ....sum(产品1金额+产品2金额+合同1数量) as 得分.... 报数据类型错,如果改?
实测得分计算没对,即使不加如合同有效的计算,只计算产品金额也不对,除非把语句写成 sum(isnull(产品1金额,0))+sum(isnull(产品2金额,0))+(case when 合同1='有效' then 1 else 0 end) as 等分 还能再精简么?因为实际应用还用加入不同产品的销售日期的计算,不过你这个已经很有门了。
这个还能怎么精简?判断时间在where后加条件
不是,因为表中有三个日期,不能直接在最后的where处加时间判断,如果加到最后,对三个日期字段不管用or 还是 and 都不对,因为不可能每个记录都有这三个之间,如我贴图中的记录,只有张三有产品1的日期估计应该在每个单独的sum中加条件判断日期,但我不知道如何加,请指点,分是加定了。
哦,想复杂了,where后面跟三个日期的 or 条件即可,谢谢了。
go if OBJECT_ID('report')is not null drop table report go create table report( 销售人员 varchar(10), 销售小组 varchar(8), 产品1销售金额 money, 产品1销售日期 date, 产品2销售金额 money, 产品2销售日期 date, 合同1 varchar(4), 合同1签约日期 date ) go insert report select '张三','第一组',10,'2012-04-01',5,'2012-04-02',null,null union all select '李四','第二组',null,null,null,null,'有效','2012-04-03' union all select '王五','第三组',null,null,5,'2012-04-10','无效','2012-04-2'select * from reportselect 销售小组,sum(isnull(产品1销售金额,0)) as 产品1金额, sum(isnull(产品2销售金额,0)) as 产品2金额, sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量, sum(isnull(产品1销售金额,0)+isnull(产品2销售金额,0)+ (case when 合同1='有效' then 1 else 0 end))得分 from report where 产品1销售日期='2012-04-01' or 产品2销售日期='2012-04-01' or 合同1签约日期='2012-04-01' group by 销售小组/* 销售小组 产品1金额 产品2金额 合同1数量 得分 第一组 10.00 5.00 0 15.00 */--是这个意思吗?
select
销售小组,
sum(产品1金额) as 产品1销售金额,
sum(产品2金额) as 产品2销售金额,
sum(合同1) as 合同1签约数,
(sum(产品1金额)+sum(产品2金额))/10000+sum(合同1数) as 得分
from report
where 合同1=‘有效’
group by 销售小组
having
这样不对吧?如果合同1<>'有效'的记录就不参与统计了,销售人员有可能只销售了产品而没有签订合同1.
积分=两个产品的金额+合同签约数(合同=有效才算),通过语句得到下面的结果:
这样说明白没有?
select 组别,sum(isnull(产品1金额,0)) as 产品1金额,
sum(isnull(产品2金额,0)) as 产品2金额,
sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量,
sum(产品1金额+产品2金额)得分 from report
group by 组别
select 组别,sum(isnull(产品1金额,0)) as 产品1金额,
sum(isnull(产品2金额,0)) as 产品2金额,
sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量,
sum(产品1金额+产品2金额+(case when 合同1='有效' then 1 else 0 end))得分 from report
group by 组别
有门!!得分中还少个“合同有效”的计算,改成:
....sum(产品1金额+产品2金额+合同1数量) as 得分....
报数据类型错,如果改?
sum(isnull(产品1金额,0))+sum(isnull(产品2金额,0))+(case when 合同1='有效' then 1 else 0 end) as 等分
还能再精简么?因为实际应用还用加入不同产品的销售日期的计算,不过你这个已经很有门了。
不是,因为表中有三个日期,不能直接在最后的where处加时间判断,如果加到最后,对三个日期字段不管用or 还是 and 都不对,因为不可能每个记录都有这三个之间,如我贴图中的记录,只有张三有产品1的日期估计应该在每个单独的sum中加条件判断日期,但我不知道如何加,请指点,分是加定了。
if OBJECT_ID('report')is not null
drop table report
go
create table report(
销售人员 varchar(10),
销售小组 varchar(8),
产品1销售金额 money,
产品1销售日期 date,
产品2销售金额 money,
产品2销售日期 date,
合同1 varchar(4),
合同1签约日期 date
)
go
insert report
select '张三','第一组',10,'2012-04-01',5,'2012-04-02',null,null union all
select '李四','第二组',null,null,null,null,'有效','2012-04-03' union all
select '王五','第三组',null,null,5,'2012-04-10','无效','2012-04-2'select * from reportselect 销售小组,sum(isnull(产品1销售金额,0)) as 产品1金额,
sum(isnull(产品2销售金额,0)) as 产品2金额,
sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量,
sum(isnull(产品1销售金额,0)+isnull(产品2销售金额,0)+
(case when 合同1='有效' then 1 else 0 end))得分 from report
where 产品1销售日期='2012-04-01'
or 产品2销售日期='2012-04-01'
or 合同1签约日期='2012-04-01'
group by 销售小组/*
销售小组 产品1金额 产品2金额 合同1数量 得分
第一组 10.00 5.00 0 15.00
*/--是这个意思吗?