所以我想计算三个级别(L1,L2,L3)的行作为列,并且状态是一年中每个月的P。
我解决了单一查询。
选择年份(日期)作为年份,日期作为月份,(SELECT COUNT(level_id))作为L1 FROM出勤率WHERE level_id =' L1' AND status =' P'和年(日期)=' 2016' GROUP BY日期
我想要一张像这张桌子一样的桌子:
答案 0 :(得分:1)
以下查询应该为您提供所需的结果。只需使用条件聚合和GROUP BY
来计算每种类型的关卡在给定年份和月份出现的次数。
SELECT YEAR(date) AS year,
MONTH(date) AS month,
SUM(CASE WHEN level_id = 'L1' THEN 1 ELSE 0 END) AS L1,
SUM(CASE WHEN level_id = 'L2' THEN 1 ELSE 0 END) AS L2,
SUM(CASE WHEN level_id = 'L3' THEN 1 ELSE 0 END) AS L3
FROM yourTable
WHERE status = 'P' AND
YEAR(date) = 2016
GROUP BY YEAR(date),
MONTH(date)
作为未来参考的提示,如果您想避免通过两个单独的列进行排序,您也可以使用它:
GROUP BY DATE_FORMAT(date, '%Y-%m')
这会给你一个包含年份和月份的列,并且可能会使你的查询更简洁。