sql查询获取dIvided组

时间:2014-09-16 12:21:37

标签: sql sql-server

  Table - Activity(jobid,duedate,status)

状态可以是'完成'或" NotComplete"。

我需要一个SQL查询来获取

  1. 完成了多少工作
  2. 有多少工作没有完成,因为duedate大于当前日期
  3. 有多少工作没有完成,而且还没有当前日期
  4. 任何人都可以帮我这个吗?结果应该只有3行和2列。

    编辑 :我正在寻找最佳查询,可能是任何内置函数/关键字,它在单行查询中执行任务。不确定是否可能。

5 个答案:

答案 0 :(得分:0)

这样的事情:

SELECT Count(jobid) AS total, 
       'Completed' 
FROM   activity 
GROUP  BY status 
HAVING status = 'Complete' 
UNION 
SELECT Count(jobid) AS total, 
       'Completed Due in past.' 
FROM   activity 
WHERE  duedate >= Getdate() 
GROUP  BY status 
HAVING status = 'Complete' 
UNION 
SELECT Count(jobid) AS total, 
       'Completed Due in past.' 
FROM   activity 
WHERE  duedate < Getdate() 
GROUP  BY status 
HAVING status = 'Complete' 

答案 1 :(得分:0)

尝试案例:

select
  case when status='Complete' then '1'
       when status='NotComplete' and duedate >= getdate() then '2'
  else '3' end,
  count(jobid)
from Activity
group by 
  case when status='Complete' then '1'
       when status='NotComplete' and duedate >= getdate() then '2'
  else '3' end

答案 2 :(得分:0)

试试这个: -

SELECT COUNT(JOBID) Completed Jobs, STATUS
FROM Activity
WHERE STATUS = "Complete"
GROUP BY STATUS
    UNION
SELECT COUNT(JOBID) Completed Jobs, STATUS
FROM Activity
WHERE duedate > GETDATE() AND STATUS = "NotComplete"
GROUP BY STATUS
    UNION
SELECT COUNT(JOBID) Completed Jobs, STATUS
FROM Activity
WHERE duedate < GETDATE() AND STATUS = "NotComplete"
GROUP BY STATUS;

这可能对您有所帮助。

答案 3 :(得分:0)

Select sum( case when status = 'Complete' then 1 else 0 end ) as completedJobs, 
Sum ( case when status ='NotCompleted' and duedate > getdate() then 1 else 0 end ) as notcompletedinDuedate,
Sum ( case when status ='NotCompleted' and duedate < getdate() then 1 else 0 end ) as notcompletedJobs
From Activity

答案 4 :(得分:-1)

每个人,谢谢你的回复。我正在寻找2列的最佳查询。这是我的解决方案。如果有人有短/好版本查询,请建议。

    ;with cte as (
select 
    case 
        when stat = 'N' and duedate > GETDATE() then 'NG' 
        when stat = 'N' and duedate < GETDATE() then 'NL' 
        else stat 
    end As S, duedate from activity)
    select S,COUNT(*) from CTE group by (S)