SQL Server 2008 Count in Case语句使用不同的参数产生相同的结果

时间:2016-07-20 09:20:36

标签: sql sql-server

我试图将某个运营商的点击次数计算为一周的总数,然后是每天

如果需要,我可以为变量添加declare和select语句,但它们具有类似sum函数所需的效果,所以这似乎是不必要的。

我每天都得到相同的结果,这相当于总周数 - 而不是预期的效果。任何人都可以解释为什么这些陈述似乎被忽略了吗?

SELECT HITS.OPPO
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinSix   and @TodayEnd      THEN 1  ELSE 0 END) AS 'COUNT_TOTAL'
, COUNT(CASE WHEN STOP_TIME BETWEEN @TodayDate     and @TodayEnd      THEN 1  ELSE 0 END) AS 'COUNT_TODAY'
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinOne   and @TodayDate     THEN 1  ELSE 0 END) AS 'COUNT_YESTERDAY'
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinTwo   and @StartMinOne   THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN2'
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinThree and @StartMinTwo   THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN3'
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinFour  and @StartMinThree THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN4'
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinFive  and @StartMinFour  THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN5'
, COUNT(CASE WHEN STOP_TIME BETWEEN @StartMinSix   and @StartMinFive  THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN6'

FROM HITS

WHERE HITS.OPPO = @operator
    and STOP_TIME > @StartMinSix
    and ESTIMATED_COST > 0
GROUP BY HITS.OPPO

2 个答案:

答案 0 :(得分:1)

SELECT HITS.OPPO ,COUNT(在@StartMinSix和@TodayEnd之间的STOP_TIME,然后是1个为空的结束时的情况)AS' COUNT_TOTAL' ....等

答案 1 :(得分:1)

我认为你需要SUM而不是COUNT

   SELECT HITS.OPPO
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinSix   and @TodayEnd      THEN 1  ELSE 0 END) AS 'COUNT_TOTAL'
    , SUM(CASE WHEN STOP_TIME BETWEEN @TodayDate     and @TodayEnd      THEN 1  ELSE 0 END) AS 'COUNT_TODAY'
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinOne   and @TodayDate     THEN 1  ELSE 0 END) AS 'COUNT_YESTERDAY'
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinTwo   and @StartMinOne   THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN2'
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinThree and @StartMinTwo   THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN3'
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinFour  and @StartMinThree THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN4'
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinFive  and @StartMinFour  THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN5'
    , SUM(CASE WHEN STOP_TIME BETWEEN @StartMinSix   and @StartMinFive  THEN 1  ELSE 0 END) AS 'COUNT_TODAY_MIN6'

    FROM HITS

    WHERE HITS.OPPO = @operator
        and STOP_TIME > @StartMinSix
        and ESTIMATED_COST > 0
    GROUP BY HITS.OPPO