我有一个表,记录了服务器的宕机时间。
我在sqlfiddle上创建了这个表的简化版本。请在这里查看sqlfiddle
表中每条记录如下:
Reason Month Down_Time
A May 2
A May 5
B May 5
C July 15
A July 3
B June 6
A June 8
C June 2
我需要编写一个查询来获取给定月份和原因的所有组合,如果没有匹配记录,则返回NULL。
例如:如果我需要获取五月、六月和七月系统由于A、B或D原因停机的时间。那么我所期望的是...
Reason Month DOWNTIME
A May 7
A June 8
A July 3
B May 5
B June 6
B July NULL
D May NULL
D June NULL
D July NULL
由于我们在给定月份的记录中没有D,因此应该为NULL。
这是我的查询:
SELECT Reasons.reason, Months.Month,sum( a.Down_time ) AS downtime
FROM tabledown a
RIGHT JOIN (
SELECT 'A' AS reason
UNION ALL SELECT 'B' AS reason
UNION ALL SELECT 'D' AS reason
) Reasons
ON a.reason = Reasons.reason
RIGHT JOIN (
SELECT 'May' AS month
UNION ALL SELECT 'June' AS month
UNION ALL SELECT 'July' AS month
) Months
ON a.Month = Months.month
GROUP BY Reasons.reason,Months.month
ORDER BY Reasons.reason
为什么我没有得到预期的输出 :(