关于报表统计问题

renliquan 2014-05-16 10:29:32
一个用户表:Id,姓名,任务金额
Id,Name,TaskMoney

一个项目销售表
Id,UserId(对应用户Id),Money(金额),SaleDate(销售日期)

做一个报表,按日期统计每个用户的销售总额,要求显示所有用户。如果项目销售表里没有记录,怎么写?

我用Join关链(left right inner),都只能统计出有销售记录的用户。。

需要没销售记录的用户也要显示,金额显示0,日期不显示.需要group by分组
...全文
72 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
在路上_- 2014-05-16
  • 打赏
  • 举报
回复
把 where 后的条件放到 on 之后试试
SELECT
User.Id,
User.Name as 用户名,
User.TaskMoney as 任务金额,
SUM(Project.Money) as 项目总金额
FROM 用户表 as User
 
LEFT JOIN 项目表 AS Project
ON User.id=Project.UserId AND DATEPART(yyyy,Project.CreateDate)='2014'
WHERE User.TaskYear='2014' 
 
GROUP BY User.Id,User.Name,User.TaskMoney
renliquan 2014-05-16
  • 打赏
  • 举报
回复
[quote[i]=引用 1 楼 xxzxwsx 的回复:] left join[/quote] 不好意思,我问题没有表述清楚,是这样的,我Left JOIN后加了条件,就把没有的项目记录的过滤掉了。

SELECT
User.Id,
User.Name as 用户名,
User.TaskMoney as 任务金额,
SUM(Project.Money) as 项目总金额
FROM 用户表 as User

LEFT JOIN 项目表 AS Project
ON User.id=Project.UserId

WHERE User.TaskYear='2014' AND DATEPART(yyyy,Project.CreateDate)='2014'

GROUP BY User.Id,User.Name,User.TaskMoney
如果不要第二个AND的条件Project.CreateDate='2014'就可以显示所有用户,因为Left Join以左表为主,但是这个条件又是项目里的日期,所以没有项目记录的就没有这个日期,而造成被过滤掉了。。。
在路上_- 2014-05-16
  • 打赏
  • 举报
回复
left join

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧