2011-03-15 42 views
0

我正在使用SQL Server 2005並試圖以某些格式獲取某些統計數據,因爲它被加載到不應該更改的圖形中。SQL統計謎語

圖表加入日期,類型和總和。在我的案例中輸入域名,總和是這個網站每天售出多少。

現在我有兩個數據庫表UsersSalesUsersuserIDregistrationSite列。 Sales得到saleID,userIDsum。這是查詢我得到我的統計信息有一個問題的所有細節。

即使在此日期沒有出售此域以使圖工作,我應該在選擇中獲得「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) 
+0

你需要一個外部聯接到一個日期表(或數表,你作爲一個日期表用)填寫缺少的日期。 – 2011-03-15 09:39:01

+0

@馬丁,你是什麼意思?你的意思是創建日期表和外部連接到它的「on子句」? – eugeneK 2011-03-15 09:41:59

+0

我相信馬丁意味着將你的'right join'改爲'full outer join'。 – 2011-03-15 10:10:59

回答

1

也許這是你正在尋找的這個輸出,或者你可以修改ti得到你想要的。

cteDates建立從今天到一個月的日期列表。針對distinct RegistrationSite的交叉連接可確保您爲每個日期和網站組合獲得一行。銷售的left outer join獲得每個日期/網站行的總和。

;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 
+0

感謝它的工作原理,我試圖避免與日曆混亂,但似乎這是目前唯一的選擇... – eugeneK 2011-03-15 11:16:52