我必须做一些报告,涉及各种表格,并且有几个SUM,COUNT等等,一切都很好。但我要解决的最后一件事是由另一个不在分组列中的SUM。 我会给你一个例子(从我的内容中删除),这样你就可以理解前一段中的绕口令。
假设我有一个带有几个连接的查询,它可以得到这个结果,或者一个临时表,或者其他什么: (这是一个精简版,原版我有更多的专栏和小组)
APP_ID CAT_ID CAT_DESCRIP APP_START APP_END DETAIL_ID DET_QTY DETAIL_PRICE
1 1 Categ One 900 960 1 10 150.00
1 1 Categ One 900 960 2 8 20.00
1 1 Categ One 900 960 3 12 30.00
1 1 Categ One 900 960 4 5 100.00
2 2 Categ Two 600 720 5 12 150.00
2 2 Categ Two 600 720 6 10 50.00
3 2 Categ Two 1200 1260 7 5 20.00
我需要得到类似的内容:(粗体列很重要)
SELECT
CAT_ID,
CAT_DESCRIP,
SUM(DET_QTY) as
TotalQTY
,
SUM(DETAIL_PRICE) as TotalPrice
,
COUNT(DISTINCT APP_ID) as CountOfApps
,
(GET THE SUM OF (APP_END - APP_START) ONLY ONE TIME BY APP_ID INTO THIS CATEG) as TimeInMinutesByCategory
FROM
MyTable
GROUP BY
CAT_ID
结果必须给我这个:
TotalQTY
感谢您的帮助!
答案 0 :(得分:0)
我认为这将完成这项工作......或者如果没有,对sytnax for max(app_start)稍微调整一下 - max(app_end)应该完成这项工作
这个想法是,通过app_id和cat_id汇总子查询中的数据。选择开始和结束的最大值,按app_id和cat_id分组。由于每个不同的app_id和cat_id对只有一个值,我们基本上只是重复数据删除。
然后,将子查询加入主查询并按类别ID汇总。
SELECT
a.CAT_ID,
a.CAT_DESCRIP,
SUM(a.DET_QTY) as TotalQTY,
SUM(a.DETAIL_PRICE) as TotalPrice,
COUNT(DISTINCT a.APP_ID) as CountOfApps,
SUM(b.TimeInMinutesByCategory) AS TimeInMinutesByCategory
FROM
MyTable AS a
INNER JOIN (
SELECT APP_ID, CAT_ID, max(app_start) - max(app_end) AS TimeInMinutesByCategory
FROM MyTable
GROUP BY APP_ID, CAT_ID) AS b
ON a.cat_id = b.cat_id
AND a.app_id = b.app_id
GROUP BY
a.CAT_ID