2014-05-17 17 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