尝试按名称和日期对sql结果进行分组

时间:2011-12-31 20:38:13

标签: sql database oracle group-by

我有一个工程师名称和日期作为浮动的表格。

我做了以下

select t.eng_id, t.createdat
from JOBS t 
where t.ENG_ID in (SELECT ENG_NAME From HOSEFLEX.ENGINEERS) 

让我

1   bungle  40767.8305520833
2   bungle  40767.7657221412
3   Shaun   40825.6510914583
4   Shaun   40767.8287994213
5   Shaun   40825.6041891204
6   Shaun   40908.8024086458

我将浮动转换为年月

select eng_id,
      TO_CHAR( to_date('12/30/1899', 'MM/DD/YYYY') + t.createdat , 'YYYY-MON')
from JOBS t

让我

1   bungle  2011-AUG
2   bungle  2011-AUG
3   Shaun   2011-OCT
4   Shaun   2011-AUG
5   Shaun   2011-OCT
6   Shaun   2011-DEC

但我想要的是每个工程师每月的参赛人数

Eng Name  2011-Aug 2011-OCT 2011-DEC
bungle     2        0        0
Shaun      1        2   

如果可能我希望能够设置开始和结束日期来过滤

提前致谢

2 个答案:

答案 0 :(得分:1)

工程师小组:

select t.eng_id, count(t.createdat)
from JOBS t 
where t.ENG_ID in (SELECT ENG_NAME From HOSEFLEX.ENGINEERS) 
and   t.createdat > 1-DEC-2011 and t.createdat < 1-JAN-2012 -- example of filter by date

group by t.ENG_ID

(您不能按工程师分组并显示日期。)

更新:

您可以做的是按月和年分组,然后显示它。

select t.eng_id, Year(t.createdat), Month(t.createdat), count(t.createdat)
from JOBS t 
where t.ENG_ID in (SELECT ENG_NAME From HOSEFLEX.ENGINEERS) 
and   t.createdat > 1-DEC-2011 and t.createdat < 1-JAN-2012    
group by t.ENG_ID, Year(t.createdat), Month(t.createdat)

答案 1 :(得分:1)

简短回答 - 您可以在计算时使用分组。因此,您可以使用NVL和case / when以及其他计算和函数。