【发布时间】:2014-08-08 14:00:04
【问题描述】:
我一直在尝试创建一个返回如下结果的 SQL 查询:
May 2013 P1 0
May 2013 P2 5
May 2013 P3 2
May 2013 P4 1
June 2013 P1 3
June 2013 P2 2
June 2013 P3 4
June 2013 P4 9
July 2013 P1 0
July 2013 P2 0
July 2013 P3 5
July 2013 P4 2
这个想法是我有两张表 Priority 和 Work:
Priority:
Name|Value
P1 9
P2 7
P3 5
P4 2
...
工作:
ID | PriorityValue | CompleteTime
1 9 03/04/2013
2 5 02/09/2013
3 7 12/01/2014
4 9 11/02/2014
如何为过去 12 个月或更长时间内的每个优先工作生成计数?
到目前为止,我已经从这个Include monthly counts including months where data doesn't exist 中查看了解决方案
到目前为止我得到的查询是:
;WITH d(d) AS
(
SELECT DATEADD(MONTH, n, DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130501'), 0))
FROM ( SELECT TOP (DATEDIFF(MONTH, '20130501', '20140401') + 1)
n = ROW_NUMBER() OVER (ORDER BY [object_id]) - 1
FROM sys.all_objects ORDER BY [object_id] ) AS n
)
SELECT
d.d,
DATENAME(MONTH, d.d) as [Month],
YEAR(d.d) as [Year],
Priority.Name, COUNT(Work.ID) AS Count
FROM d LEFT OUTER JOIN Work
ON CompleteTime >= d.d
AND CompleteTime < DATEADD(MONTH, 1, d.d) RIGHT OUTER JOIN Priority on Work.PriorityValue = Priority.Value
GROUP BY d.d, Priority.Name
ORDER BY d.d;
但它只生成优先级计数> 0的月份列表。例如:
May 2013 P3 5
May 2013 P4 55
July 2013 P3 8
July 2013 P4 48
August 2013 P3 2
August 2013 P4 8
【问题讨论】:
-
什么数据库? (甲骨文?postgres?)