2013-07-10 196 views
1
Select Name, 
sum(case when DayAci = 'Sunday' then 1 else 0 END) as Sunday, 
sum(case when DayAci = 'Monday' then 1 else 0 END) as Monday, 
sum(case when DayAci = 'Tuesday' then 1 else 0 END) as Tuesday, 
sum(case when DayAci = 'Wednesday' then 1 else 0 END) as Wednesday, 
sum(case when DayAci = 'Thursday' then 1 else 0 END) as Thursday, 
sum(case when DayAci = 'Friday' then 1 else 0 END) as Friday, 
sum(case when DayAci = 'Saturday' then 1 else 0 END) as Saturday, 
count(*) as Total 
from Caraccident 
where Accident = 'Near-miss' 
group by Name; 

Select Name, 
count(*) as Total 
From CaraccidentPrevious 
where Accident = 'Near-miss' 
group by Name; 

要在表格中這樣如何將這兩個sql查詢合併爲一個?

Name | Sunday | Monday | Tuesday | ..... | Total | Previous Total 

Joe  0  2   1    3   5 

顯示信息的第一個SQL語句給我我需要的每一天,總的數據。 第二個給我我以前總計需要的數據。使用SQL Server

回答

1

你可以加入結果放在一起,使用子查詢:

Select Name, sum(case when DayAci = 'Sunday' then 1 else 0 END) as Sunday, 
     sum(case when DayAci = 'Monday' then 1 else 0 END) as Monday, 
     sum(case when DayAci = 'Tuesday' then 1 else 0 END) as Tuesday, 
     sum(case when DayAci = 'Wednesday' then 1 else 0 END) as Wednesday, 
     sum(case when DayAci = 'Thursday' then 1 else 0 END) as Thursday, 
     sum(case when DayAci = 'Friday' then 1 else 0 END) as Friday, 
     sum(case when DayAci = 'Saturday' then 1 else 0 END) as Saturday, 
     count(*) as Total, max(cap.prevTotal) as prevTotal 
from Caraccident ca left outer join 
     (select cap.name, count(*) as prevTotal 
     from CaraccidentPrev cap 
     where cap.Accident = 'Near-miss' 
     group by cap.name 
    ) cap 
     on cap.name = ca.name 
where Accident = 'Near-miss' 
group by Name; 
+0

感謝您的幫助再次 –

+0

這應該是一個'COALESCE(MAX(cap.prevTotal) 0)AS prevTotal'來防止由於LEFT JOIN導致的NULL計數。 – Curt

1
Select Name, 
    sum(case when DayAci = 'Sunday' then 1 else 0 END) as Sunday, 
    sum(case when DayAci = 'Monday' then 1 else 0 END) as Monday, 
    sum(case when DayAci = 'Tuesday' then 1 else 0 END) as Tuesday, 
    sum(case when DayAci = 'Wednesday' then 1 else 0 END) as Wednesday, 
    sum(case when DayAci = 'Thursday' then 1 else 0 END) as Thursday, 
    sum(case when DayAci = 'Friday' then 1 else 0 END) as Friday, 
    sum(case when DayAci = 'Saturday' then 1 else 0 END) as Saturday, 
    count(*) as Total 
    (SELECT count(*) from CaraccidentPrevious 
     WHERE Accident = 'Near-miss' 
     AND name = CarAccident.name 
     AND Accident = 'Near-miss')     AS PreviousTotal 
    group by Name; 
0
Select CC.Name, 
sum(case when CC.DayAci = 'Sunday' then 1 else 0 END) as Sunday, 
sum(case when CC.DayAci = 'Monday' then 1 else 0 END) as Monday, 
sum(case when CC.DayAci = 'Tuesday' then 1 else 0 END) as Tuesday, 
sum(case when CC.DayAci = 'Wednesday' then 1 else 0 END) as Wednesday, 
sum(case when CC.DayAci = 'Thursday' then 1 else 0 END) as Thursday, 
sum(case when CC.DayAci = 'Friday' then 1 else 0 END) as Friday, 
sum(case when CC.DayAci = 'Saturday' then 1 else 0 END) as Saturday, 
count(CC.*) as Total, 
max(T.Total1) 
from Caraccident CC 
inner join (Select Name,count(*) as Total1 
      From CaraccidentPrevious 
      where Accident = 'Near-miss' 
      group by Name; 
      )T 
on T.name=CC.name 
where Accident = 'Near-miss' 
group by Name; 
+0

它的工作,但我無法得到Total從CaraccidentPrevious列名稱顯示。它只是說[無列名] –