Sql server 2005 Sql统计之谜

Sql server 2005 Sql统计之谜,sql-server-2005,tsql,Sql Server 2005,Tsql,我正在使用SQLServer2005,并试图以某种格式获取一些统计数据,因为这些数据被加载到不应更改的图形中 图表acceps日期、类型和总和。在我的域名和金额的情况下键入多少是这个网站每天售出 现在我有两个DB表,Users和Sales用户具有用户ID和注册站点列销售gotsaleID,userID和sum。这是我通过一个问题获取统计数据所有详细信息的查询 我应该在select中获得“0”值,即使在该日期该域没有销售,也可以使图表正常工作。有办法吗 select sum(s.sum)

我正在使用SQLServer2005,并试图以某种格式获取一些统计数据,因为这些数据被加载到不应更改的图形中

图表acceps日期、类型和总和。在我的域名和金额的情况下键入多少是这个网站每天售出

现在我有两个DB表,
Users
Sales
<代码>用户具有
用户ID
注册站点
列<代码>销售got
saleID
userID
sum
。这是我通过一个问题获取统计数据所有详细信息的查询

我应该在select中获得“0”值,即使在该日期该域没有销售,也可以使图表正常工作。有办法吗

select 
    sum(s.sum) sum,u.registrationSite,
    dateadd(dd, datediff(dd, 0, s.date), 0) date 
from Users u
right join Sales s on u.userid=s.userid
where 
    s.date > dateadd(mm, -1, getdate())
group by 
    registrationSite,dateadd(dd,datediff(dd,0,s.date),0)
order by 
    dateadd(dd, datediff(dd, 0, s.date), 0)

也许您正在寻找的就是这个输出,或者您可以修改它以获得您想要的

cteDates
构建一个从今天到一个月前的日期列表。对
distinct RegistrationSite
的交叉连接可确保为日期和站点的每个组合获得一行
left outer join
to sales获取每个日期/站点行的总和

;with cteDates as
(
  select dateadd(dd, datediff(dd, 0, getdate()), 0) as [Date]
  union all
  select dateadd(dd, -1, [Date]) as [Date]
  from cteDates
  where [Date] > dateadd(mm, -1, getdate())
)
select
  sum(coalesce(s.[Sum], 0)) as [Sum],
  r.RegistrationSite,
  cd.[Date]
from cteDates as cd
  cross join (select distinct RegistrationSite
              from Users) as r
  left outer join 
      (select [Date], [sum], RegistrationSite
       from Sales
         inner join Users
           on Sales.UserID = Users.UserID) as s
   on cd.[Date] = dateadd(dd, datediff(dd, 0, s.[Date]), 0) and
      r.RegistrationSite = s.RegistrationSite
group by r.RegistrationSite, cd.[Date]
order by cd.[Date]
结果

0           site 1           2011-03-12 00:00:00.000
0           site 2           2011-03-12 00:00:00.000
0           site 1           2011-03-13 00:00:00.000
0           site 2           2011-03-13 00:00:00.000
60          site 1           2011-03-14 00:00:00.000
50          site 2           2011-03-14 00:00:00.000
0           site 1           2011-03-15 00:00:00.000
40          site 2           2011-03-15 00:00:00.000

您需要在日期表(或用作日期表的数字表)上进行外部联接,以填充缺少的日期。@Martin,这是什么意思?你的意思是要创建日期表并在其上进行外部联接,在哪个“on子句”上?我相信Martin的意思是将你的
右联接
更改为
完全外部联接
@Lieven,它没有设置为当天没有单笔销售的站点的空和。感谢它的工作,我试图避免这种日历混乱,但似乎这是目前为止唯一的选择。。。