2014-12-24 99 views
1

我有一个查询:获取查询结果的金额范围内同一查询

SELECT case 

when Submission__bTracking = 'Phone' then 'Phone' 
when Submission__bTracking = 'Web' then 'Web' 
when Submission__bTracking = 'Email' then 'Email 
when Submission__bTracking = 'Live__bTech__bSupport' then '@ Live Tech Support 
when Submission__bTracking = 'Verbal' then 'Verbal Request' 
when Submission__bTracking = 'Fax__b__f__bform' then 'Fax/Form' 

End as Sub_Tracking, 

COUNT(Submission__bTracking) as tickets FROM dbo.MASTER30 

WHERE mrSUBMITDATE >= (CONVERT (date, CURRENT_TIMESTAMP -1)) 
AND mrSUBMITDATE < (CONVERT (date, CURRENT_TIMESTAMP)) 

GROUP BY Submission__bTracking 

产生以下结果:

Sub_Tracking    tickets 
Email      36 
Fax/Form     1 
@ Live Tech Support   18 
Phone      441 
Web       41 

我怎么还生产中所有的门票总和同样的查询?

象下面这样:

Sub_Tracking    tickets 
Email      36 
Fax/Form     1 
@ Live Tech Support   18 
Phone      441 
Web       41 
ALL       537 

感谢您的帮助!

+0

也许只是做工会,并选择一个更排它概括这一切? – buhtla

回答

2

您可以使用UNION,只是在结果集中增加一个行:

YOUR QUERY 

UNION ALL 
select 'ALL' as Sub_Tracking, 
COUNT(Submission__bTracking) as tickets FROM dbo.MASTER30 

WHERE mrSUBMITDATE >= (CONVERT (date, CURRENT_TIMESTAMP -1)) 
AND mrSUBMITDATE < (CONVERT (date, CURRENT_TIMESTAMP)) 
+0

我可能会改变这里唯一的事情(这是巨大nitpicky)是使用UNION ALL与UNION(例如http://stackoverflow.com/questions/49925/what-is-the-difference-between-union-and-union-all)。但除此之外,这将工作,我可能会更喜欢它与WITH ROLLUP(虽然以后是一个有效的选项以及) – evanv

+0

你是对的,UNION ALL更有效,但在这种情况下不相关,因为数据量非常大小(共7排)。不过谢谢你的提示。 – buhtla

+0

这是一个超级挑剔的细节。对此没有任何争议。尽管这个细节太细腻,我仍然赞同你的回应。 – evanv

1

你可以做

...previous lines omitted 
GROUP BY Submission__bTracking 
UNION 
SELECT 'ALL' as Sub_Tracking, count(Submission__bTracking) as tickets 
FROM dbo.MASTER30 
WHERE mrSUBMITDATE >= (CONVERT (date, CURRENT_TIMESTAMP -1)) 
AND mrSUBMITDATE < (CONVERT (date, CURRENT_TIMESTAMP)) 
+0

我可能在这里改变的唯一一件事(这是巨大的nitpicky)是使用UNION ALL vs UNION(例如http://stackoverflow.com/questions/49925/what-is-the-difference-between-union-and -union-ALL)。但除此之外,这将工作,我可能会更喜欢它与WITH ROLLUP(虽然后者是一个有效的选项以及) – evanv

0

这里有真正的两种选择。一是工会您有另外一个,计算所有的门票,像

SELECT case 

when Submission__bTracking = 'Phone' then 'Phone' 
when Submission__bTracking = 'Web' then 'Web' 
when Submission__bTracking = 'Email' then 'Email 
when Submission__bTracking = 'Live__bTech__bSupport' then '@ Live Tech Support 
when Submission__bTracking = 'Verbal' then 'Verbal Request' 
when Submission__bTracking = 'Fax__b__f__bform' then 'Fax/Form' 

End as Sub_Tracking, 

COUNT(Submission__bTracking) as tickets FROM dbo.MASTER30 

WHERE mrSUBMITDATE >= (CONVERT (date, CURRENT_TIMESTAMP -1)) 
AND mrSUBMITDATE < (CONVERT (date, CURRENT_TIMESTAMP)) 

GROUP BY Submission__bTracking 

UNION ALL 

SELECT "All" AS Sub_Tracking, 

COUNT(Submission__bTracking) as tickets FROM dbo.MASTER30 

WHERE mrSUBMITDATE >= (CONVERT (date, CURRENT_TIMESTAMP -1)) 
AND mrSUBMITDATE < (CONVERT (date, CURRENT_TIMESTAMP)) 

初始查询另一种选择是WITH ROLLUP使用(如http://dev.mysql.com/doc/refman/5.6/en/group-by-modifiers.html

这将是这样的:

SELECT case 

when Submission__bTracking = 'Phone' then 'Phone' 
when Submission__bTracking = 'Web' then 'Web' 
when Submission__bTracking = 'Email' then 'Email 
when Submission__bTracking = 'Live__bTech__bSupport' then '@ Live Tech Support 
when Submission__bTracking = 'Verbal' then 'Verbal Request' 
when Submission__bTracking = 'Fax__b__f__bform' then 'Fax/Form' 

End as Sub_Tracking, 

COUNT(Submission__bTracking) as tickets FROM dbo.MASTER30 

WHERE mrSUBMITDATE >= (CONVERT (date, CURRENT_TIMESTAMP -1)) 
AND mrSUBMITDATE < (CONVERT (date, CURRENT_TIMESTAMP)) 

GROUP BY Submission__bTracking WITH ROLLUP 

后来的选项将不输出“ALL”行,但它是短了很多......此外,您不能使用ORDER BY和WITH ROLLUP在一起,所以知道,提前为好。

在这两者之间,我可能会使用第一个选项....这是同由谁回答,但我会使用UNION ALL而不是UNION的其他人提供的两个。这是一个挑剔的细节,但如果你不需要它们,为什么还要重复检查。欲了解更多关于UNION VS UNION ALL,请上网:What is the difference between UNION and UNION ALL?