Sql server 2005 Sql统计之谜
我正在使用SQLServer2005,并试图以某种格式获取一些统计数据,因为这些数据被加载到不应更改的图形中 图表acceps日期、类型和总和。在我的域名和金额的情况下键入多少是这个网站每天售出 现在我有两个DB表,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)
Users
和Sales
<代码>用户具有用户ID
和注册站点
列<代码>销售gotsaleID
,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,它没有设置为当天没有单笔销售的站点的空和。感谢它的工作,我试图避免这种日历混乱,但似乎这是目前为止唯一的选择。。。