2012-05-09 79 views
0

我有两个非常相似的SQL查询,返回在不同工作区上花费的分钟数。SQL查询凝聚

是否可以将它们压缩为一个查询?

参数需要:

显示当月(IE 1月,4月为) 显示来自查询到一个单一查询的总分钟数。

这里是我此刻的查询:

SELECT SUM(r.Minutes_Spent) AS 'Custom Programming and Consulting' 
FROM TK_Project p 
INNER JOIN TK_Task t 
ON p.Project_ID = t.Project_ID JOIN TK_Time_Record r 
ON t.ID = r.Task_ID 
WHERE p.Company = 162 
AND p.Name ='Technical Support' 
AND r.Work_Date BETWEEN '04/01/2001' AND '04/30/2012' 
AND r.Type NOT LIKE '%non%' 
AND (r.Type = 'Programming-Billable' OR r.Type = 'Consulting-Billable') 

SELECT SUM(r.Minutes_Spent) AS 'Tech. Support/Data Maint./Training' 
FROM TK_Project p 
INNER JOIN TK_Task t 
ON p.Project_ID = t.Project_ID JOIN TK_Time_Record r 
ON t.ID = r.Task_ID 
WHERE p.Company = 162 
AND p.Name ='Technical Support' 
AND r.Work_Date BETWEEN '04/01/2001' AND '04/30/2012' 
AND r.Type NOT LIKE '%non%' 
AND (r.Type = 'Data Maintenance' OR r.Type = 'Tech Support-Billable' OR r.Type = 'Training') 

下面是他们提供的数据:

Custom Programming and Consulting 
90 

Tech. Support/Data Maint./Training 
105 

是否有可能得到上面的查询推入一个查询,并将其返回以下数据:

Month  Custom Programming and Consulting  Tech. Support/Data Maint./Training 
    4     90           105 

该月需要显示当前月份是在t他的部分查询:

AND r.Work_Date BETWEEN '04/01/2001' AND '04/30/2012' 

我不确定实现这一目标的最佳方法。我需要这个月,因为我需要升级的下一部分是从今天的日期起12个月后返回图形条形图报告。

回答

2

是的。 。 。您只需在SELECT子句中使用case语句按照需要的方式对值进行分组:

SELECT 
    SUM(case 
     when r.Type in ('Programming-Billable', 'Consulting-Billable') 
     then r.Minutes_Spent 
     end) AS "Custom Programming and Consulting", 
    SUM(case 
     when (r.Type in ('Data Maintenance', 'Tech Support-Billable', 'Training') 
     then r.Minutes_Spent 
     end) AS "Tech. Support/Data Maint./Training" 
FROM TK_Project p 
INNER JOIN TK_Task t 
    ON p.Project_ID = t.Project_ID 
JOIN TK_Time_Record r 
    ON t.ID = r.Task_ID 
WHERE p.Company = 162 
    AND p.Name ='Technical Support' 
    AND r.Work_Date BETWEEN '04/01/2001' AND '04/30/2012' 
    AND r.Type NOT LIKE '%non%'