2017-04-05 20 views
0

我一直在试图获得每个月的小组数据计数。在问题表中有一个名为子组的列,并且还有sdate列用于保存插入日期。我想在几个月内获得所有小组计数。所以我可以看到每个子组在一个月内插入了多少个数据。如何加入一个多列?

我有这个查询到目前为止,这适用于1个子组。我想添加其他的子组。

SELECT all_months.month "Month", COUNT(QUESTIONS.SUBGROUP) AS FI 
      FROM(SELECT LEVEL AS month FROM DUAL CONNECT BY LEVEL <= 12) all_months 
LEFT OUTER JOIN QUESTIONS ON(all_months.month = EXTRACT(MONTH FROM SDATE) AND 
SUBGROUP='FI' AND EXTRACT(YEAR FROM SDATE) = EXTRACT(YEAR FROM SYSDATE)) 
GROUP BY all_months.month ORDER BY "Month" ASC; 

该查询返回的:

result

,这就是我想要的。

what i want

在此先感谢。

回答

2

您可以使用条件聚集

SELECT all_months.month "Month", 
     COUNT(CASE WHEN QUESTIONS.SUBGROUP = 'FI' THEN 1 END) AS FI, 
     COUNT(CASE WHEN QUESTIONS.SUBGROUP = 'G1' THEN 1 END) AS G1, 
     COUNT(CASE WHEN QUESTIONS.SUBGROUP = 'G2' THEN 1 END) AS G2, 
     COUNT(CASE WHEN QUESTIONS.SUBGROUP = 'G3' THEN 1 END) AS G3 
FROM ( 
    SELECT LEVEL AS month 
    FROM DUAL CONNECT BY LEVEL <= 12) all_months 
    LEFT OUTER JOIN QUESTIONS 
    ON(all_months.month = EXTRACT(MONTH FROM SDATE) AND 
    SUBGROUP IN ('FI', 'G1', 'G2', 'G3') AND 
    EXTRACT(YEAR FROM SDATE) = EXTRACT(YEAR FROM SYSDATE)) AS t 
GROUP BY all_months.month 
ORDER BY "Month" ASC; 
+0

完美!谢谢你,先生 :) –