比如,一个表(report)里面有如下字段:
--------------------------------------------------
销售人员 销售小组 产品1销售金额 产品1销售日期 产品2销售金额 产品2销售日期 合同1 合同1签约日期
A 第一组 5 2012-04-01
B 第二组 10 2012-04-02 有效 2012-04-03
......
---------------------------------------------------
现需要统计一个这样的结果:
销售小组 产品1销售金额 产品2销售金额 合同1签约数 得分 '得分公式=(产品1金额+产品2金额)/10000+合同1数
----------------------------------------------------
我可以用如下语句:
- SQL code
select 销售小组='第一组',产品1销售金额=(select isnull(sum(产品1金额),0) from report where 销售小组='第1组'),产品2销售金额=(select isnull(sum(产品2金额),0) from report where 销售小组='第1组'),合同1签约数=(select count(*) from report where 合同1=‘有效’),得分=(select isnull(sum(产品1金额),0) from report where 销售小组='第1组')/10000+(select isnull(sum(产品2金额),0) from report where 销售小组='第1组')/10000+(select count(*) from report where 合同1=‘有效’)union......(小组2的记录,语句同小组1)
但这样写的语句实在太长了,有错也很难修改,何况小组远不止一个……
其实我想达到的目的就是以下两个语句的集合,但不知道如果做:
语句1:
- SQL code
select 销售小组,sum(产品1销售金额) as 产品1金额,sum(产品2金额) as 产品2金额 from reportgroup by 销售小组
和
语句2
- SQL code
select 销售小组,count(*) as 合同1签约数 from reportwhere 合同1='有效'group by 销售小组
这两个查询语句的结果用来横向连接显示,然后增加一个“积分”的列,按上面的条件计算,我该如何做?
先解决这个问题,再说如果我把不同产品和合同放到不同表中该如何关联合并的问题。
------解决方案--------------------
- SQL code
goif OBJECT_ID('report')is not nulldrop table reportgocreate table report(销售人员 varchar(10),销售小组 varchar(8),产品1销售金额 money,产品1销售日期 date,产品2销售金额 money,产品2销售日期 date,合同1 varchar(4),合同1签约日期 date)goinsert reportselect '张三','第一组',10,'2012-04-01',5,'2012-04-02',null,null union allselect '李四','第二组',null,null,null,null,'有效','2012-04-03' union allselect '王五','第三组',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 reportwhere 产品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*/--是这个意思吗?