2013-04-29 126 views
1

我已经在此搜索了一个答案,但无法找到相当多的方式根据条件获取此不同的记录集。我有一个表下面的示例数据:SELECT DISTINCT HAVING计算唯一条件

 
+---------+-------------+ 
| Branch | Task Status | 
+---------+-------------+ 
| Account | Completed | 
| HR  | Completed | 
| Account | Completed | 
| HR  | Not Define | 
| Account | Uncompleted | 
| Account | Not Define | 
| Account | Completed | 
| HR  | Uncompleted | 
| HR  | Uncompleted | 
| HR  | Completed | 
| HR  | Not Define | 
+---------+-------------+ 

我想创建一个查询,显示总任务的数量,还希望总任务状态的任务的明智号码,例如

Branch Total Task Completed Uncompleted Not Define 
Account  5   3  1   1 
Admin   6   2  2   2 
+0

你使用什么数据库系统演示? – 2013-04-29 12:52:42

回答

1
SELECT Branch 
    , COUNT(1) as Total 
    , COUNT(CASE WHEN TaskStatus = 'Completed' THEN 1 ELSE 0 END) AS Completed 
    , COUNT(CASE WHEN TaskStatus = 'Uncompleted' THEN 1 ELSE 0 END) AS Uncompleted 
    , COUNT(CASE WHEN TaskStatus = 'Not Define' THEN 1 ELSE 0 END) AS NotDefine 
FROM Table 
GROUP BY Branch 
2
SELECT branch, 
     COUNT(*), 
     SUM(CASE status WHEN 'completed' THEN 1 END) AS completed, 
     SUM(CASE status WHEN 'uncompleted' THEN 1 END) AS uncompleted, 
     SUM(CASE status WHEN 'not define' THEN 1 END) AS not_define 
FROM task 
GROUP BY 
     branch 
+0

在我的草稿中同样的答案:) – hims056 2013-04-29 12:33:29

1
SELECT branch, 
COUNT(*), 
COUNT(CASE taskstatus WHEN 'Completed' THEN 1 END), 
COUNT(CASE taskstatus WHEN 'Uncompleted' THEN 1 END), 
COUNT(CASE taskstatus WHEN 'Not Define' THEN 1 END) 
FROM YourTable 
GROUP BY branch; 
0

试试这个

SELECT * FROM (SELECT 
ROW_NUMBER() OVER(PARTITION BY Branch ORDER BY [Task Status]) AS No, 
Branch, 
sum (CASE WHEN [Task Status] = 'Completed' THEN 1 ELSE 0 END) OVER (PARTITION BY Branch) AS [Completed], 
sum (CASE WHEN [Task Status] = 'Not Define' THEN 1 ELSE 0 END) OVER (PARTITION BY Branch) AS [Not Define], 
sum (CASE WHEN [Task Status] = 'Uncompleted' THEN 1 ELSE 0 END) OVER (PARTITION BY Branch) AS [Uncompleted] 
FROM task) AS T1 WHERE No = 1 

SELECT * FROM (SELECT 
ROW_NUMBER() OVER(PARTITION BY Branch ORDER BY [Task Status]) AS No, 
Branch, 
count (CASE WHEN [Task Status] = 'Completed' THEN 1 ELSE 0 END) OVER (PARTITION BY Branch) AS [Completed], 
count (CASE WHEN [Task Status] = 'Not Define' THEN 1 ELSE 0 END) OVER (PARTITION BY Branch) AS [Not Define], 
count (CASE WHEN [Task Status] = 'Uncompleted' THEN 1 ELSE 0 END) OVER (PARTITION BY Branch) AS [Uncompleted] 
FROM task) AS T1 WHERE No = 1 
0

在SQL Server2005中+你可以使用PIVOT操作

SELECT * 
FROM (
     SELECT *, COUNT(*) OVER(PARTITION BY Branch) AS TotalTask 
     FROM dbo.task 
    ) p  
PIVOT 
(
    COUNT(p.Task) FOR p.Task IN ([Completed], [Uncompleted], [Not Define]) 
) x 

SQLFiddle