2014-05-17 62 views
-1

我有以下查詢:的Sql支點與多個計數

select distinct 
(SELECT COUNT (TaskID) FROM Task, Employee where SupervisorID = '752A0F4D-9905-4D55-87F1-AFA19245C206' and task.UserID = Employee.UserID) as Total, 
(SELECT COUNT (TaskID) FROM Task, Employee where SupervisorID = '752A0F4D-9905-4D55-87F1-AFA19245C206' and task.UserID = Employee.UserID and DateDue <= DATEADD(day,-1, GETDATE()))as TotalOverdue, 
(SELECT COUNT (TaskID) FROM Task, Employee where SupervisorID = '752A0F4D-9905-4D55-87F1-AFA19245C206' and task.UserID = Employee.UserID and DateDue >= DATEADD(day,-1, GETDATE())) as Totaldue 
from Task 

它給了我下面的結果:

Total | TotalOverdue | TotalDue 
5  | 4   | 1 

不過,我想它格式化這樣:

Total: 5 
TotalOverdue: 4 
TotalDue: 1 

我曾嘗試使用透視功能,但無法真正讓它正常工作。有任何想法嗎?

+0

您正在尋找['UNION ALL'](http://www.techonthenet.com/oracle/union_all.php)運算符... – Ben

+0

我嘗試過使用union all運算符,但後來我只是結束了單個列中的數據,但無法查看哪一行屬於哪一行。 – dQlle

回答

0

我認爲你可以做你想做有條件聚集了什麼:

select count(*) as Total, 
     sum(case when DateDue <= DATEADD(day, -1, GETDATE()) then 1 else 0 
      end) as TotalOverdue, 
     sum(case when DateDue >= DATEADD(day, -1, GETDATE()) then 1 else 0 
      end) as TotalDue 
from Task join 
    Employee 
    on task.UserID = Employee.UserID 
where SupervisorID = '752A0F4D-9905-4D55-87F1-AFA19245C206'; 

如果你想爲全體監事,

select SupervisorID, count(*) as Total, 
     sum(case when DateDue <= DATEADD(day, -1, GETDATE()) then 1 else 0 
      end) as TotalOverdue, 
     sum(case when DateDue >= DATEADD(day, -1, GETDATE()) then 1 else 0 
      end) as TotalDue 
from Task join 
    Employee 
    on task.UserID = Employee.UserID; 

編輯:

你真的想UNPIVOT的數據。這裏有一個方法:

select n.which, 
     (case when n.which = 'Total' 
      then count(*) 
      when n.which = 'TotalOverdue' 
      then sum(case when DateDue <= DATEADD(day, -1, GETDATE()) then 1 else 0 
           end) 
      else sum(case when DateDue >= DATEADD(day, -1, GETDATE()) then 1 else 0 
         end) 
     end) as value 
from Task join 
    Employee 
    on task.UserID = Employee.UserID cross join 
    (select 'Total' as which union all 'TotalOverdue' union all 'TotalDue') n 
group by n.which; 

如果你想要一個列,它是一個字符串,使用concat()

+0

你的函數完美地工作,但它不支持數據。它給出了和以前一樣的輸出。 – dQlle