如何对列进行求和并根据月份和年份获取行

时间:2013-08-29 13:49:33

标签: asp.net sql-server

这是我的表,我可以得到这个结果。 每个用户都有积分,我必须显示当月,当前年度获得的用户积分数

感谢。

--------------------------------
| userId | points | date       |
--------------------------------
| 1      | 5      | 8/25/2013  |
| 1      | 3      | 8/16/2013  |
| 1      | 2      | 8/01/2013  |
| 1      | 2      | 9/25/2013  |
| 1      | 5      | 8/25/2013  |
| 1      | 3      | 2/16/2012  |
| 2      | NULL   | NULL       |
| 2      | NULL   | NULL       |
--------------------------------

他们的结果应该是:

---------------------------------------------------
| userId | CurrentMonthpoints | CurrentYearPoints |
---------------------------------------------------
| 1      | 15                 | 17                |
| 2      | NULL               | NULL              |
---------------------------------------------------

我的要求:

SELECT  userId, 
        (SELECT   sum(points)
            from tbl_points
            WHERE  PointsDate between '8/1/2013' and '8/31/2013') AS CurrentMonthPoints,
        (SELECT distinct SUM(points)
             from tbl_points
             WHERE PointsDate between '1/1/2014' and '12/31/2014' ) AS CurrentYearPoints
 from tbl_user_performance_points

但我的查询错误地显示为:

---------------------------------------------------
| userId | CurrentMonthpoints | CurrentYearPoints |
---------------------------------------------------
| 1      | 15                 | 17                |
| 2      | 15                 | 17                |
---------------------------------------------------

提前谢谢

3 个答案:

答案 0 :(得分:1)

尝试一下:

select a.userID,
  a.points_sum_m as currentmonthpoints,
  b.points_sum_y as currentyearpoints
from (select userID, sum(points) as points_sum_m
   from tbl_points
   where month(date) = month(getdate())
   group by userID) a
inner join (select userID, sum(points) as points_sum_y
   from tbl_points
   where year(date) = year(getdate())
   group by userID) b
on a.userID = b.userID;

SQLFiddle:http://sqlfiddle.com/#!3/ff780/12

答案 1 :(得分:0)

  with month_cte(userid,Current_Month) as
  (select userid,sum(Points)Current_Month from tbl_points
  where datepart(mm,PointsDate)=datepart(mm,getdate()) and datepart(YY,PointsDate)=datepart(yy,getdate()) group by userid)

   , year_cte(userid,Current_year) as
  (select userid,sum(Points)Current_Year from tbl_points
  where datepart(YY,PointsDate)=datepart(yy,getdate()) group by userid)

  select Distinct t.Userid, Current_Month, Current_Year From tbl_points T 
  left join month_cte mc on T.userid=mc.userid
  left join year_cte yc on t.userid=yc.userid

答案 2 :(得分:0)

如果您只想更正查询,请将其替换为此...

SELECT  userId, 
        (SELECT   sum(points)
            from tbl_points
            WHERE  PointsDate between '8/1/2013' and '8/31/2013' and userId= X.UserId) AS CurrentMonthPoints,
        (SELECT distinct SUM(points)
             from tbl_points
             WHERE PointsDate between '1/1/2014' and '12/31/2014' and userId = X.UserId) AS CurrentYearPoints
 from tbl_user_performance_points X