2010-04-23 58 views
3

我试图让每个销售人员的总数和总金额,但它不是我的工作与查询如何使用sum和count函数

目前我有:

WITH CALC1 AS (
    SELECT B.OTSMAN AS SALESMAN, COUNT(B.ONINUM) AS COUNT, SUM(B.OVSVAL) AS SVAL 
    FROM @[email protected] AS B 
    WHERE B.OCSGRP <> 'INT' AND 
     B.OCSGRP <> 'INX' AND 
     B.OCPSBR IN (@[email protected]) AND 
     B.ICMATX <> '705' AND 
     B.OCSGRP NOT LIKE 'S/%' 
    GROUP BY B.OTSMAN, B.ONINUM ORDER BY B.OTSMAN ASC 
) 
SELECT SALESMAN, COUNT, SVAL FROM CALC1 ORDER BY SALESMAN 

结果是:

AM 1 79.03 
AM 40 1337.70 
AM 48 4627.15 
AM 42 2727.40 
AM 1 111.79 
AM 1 1110.00 
AM 52 3018.77 

我该如何更改我的查询,以便每个销售人员只能获得一个记录总数和价值?

AM 1 13,011.84 
+1

我不相信您的查询有效。你把“ORDER BY B.OTSMAN ASC”放在cte中,我猜sql server会抛出一个错误。 – zsong 2010-04-23 03:14:16

回答

0

您需要通过这样的改变你的组:

with calc1 as 
(select b.otsman as salesman, 
     count(distinct b.oninum) as count, 
     sum(b.ovsval) as sval 
    from @[email protected] as b 
    where b.ocsgrp <> 'INT' 
    and b.ocsgrp <> 'INX' 
    and b.ocpsbr in (@[email protected]) 
    and b.icmatx <> '705' 
    and b.ocsgrp not like 'S/%' 
group by b.otsman 
) 
select salesman, 
     count, 
     sval 
    from calc1 
order by salesman 

更新:更新为获得每个销售员的不同订单数量

+0

感谢您的快速回复! 我想我的结果显示: 上午7 13,011.84 我需要表明,有7条记录为销售人员,而不是185的实际计数... 我怎么做,我需要另一个WITH? – Odette 2010-04-23 03:26:39

+0

@Odette:哪个字段为该销售人员定义了唯一记录?您将更新计数查询以进行计数(独特<为销售人员推销个人销售所特有的字段>)。 – 2010-04-23 05:08:16

+0

工作的一种享受! 谢谢道格曼 – Odette 2010-04-23 05:16:31

1

更改GROUP BY

GROUP BY B.OTSMAN 

喜欢的东西

;WITH CALC1 AS (
     SELECT B.OTSMAN AS SALESMAN, 
       COUNT(B.ONINUM) AS COUNT, 
       SUM(B.OVSVAL) AS SVAL 
     FROM @[email protected] AS B 
     WHERE B.OCSGRP <> 'INT' 
     AND  B.OCSGRP <> 'INX' 
     AND  B.OCPSBR IN (@[email protected]) 
     AND  B.ICMATX <> '705' 
     AND  B.OCSGRP NOT LIKE 'S/%' 
     GROUP BY B.OTSMAN 
     ORDER BY B.OTSMAN ASC 
) 

SELECT 

SALESMAN, 
COUNT, 
SVAL 

FROM CALC1 

ORDER BY SALESMAN