如何比较同一个表中的行?

时间:2012-02-03 09:22:41

标签: sql sql-server-2008

我想比较和计算同一数据集中的行。

myDataTable

hours_id(PK) | _person_id | _project_id | date_of_hour
 1       |    pe1     |    pr1      | 13.10.2011
 2       |    pe22    |    pr1      | 13.10.2011
 3       |    pe1     |    pr1      | 15.10.2011 *
 4       |    pe1     |    pr1      | 13.10.2011
 5       |    pe1     |    pr1      | 13.10.2011
 6       |    pe22    |    pr22     | 13.10.2011
 7       |    pe1     |    pr22     | 15.10.2011 *
 8       |    pe1     |    pr1      | 15.10.2011 *
 9       |    pe22    |    pr22     | 13.10.2011
 10      |    pe22    |    pr22     | 13.10.2011
 11      |    pe1     |    pr1      | 16.10.2011 **

_project_id(GUID)

在我的计划中,我可以选择_person_id_2 = pe1date_of_begin = 13.10.2011date_of_end = 15.10.2011。我想得到这个结果:

 pe1    pr1   13.10.2011  3   //(count 3 rows are the same)(ROWS 1,4,5)
 pe1    pr1   15.10.2011  2   //(ROWS 3,8)
 pe1    pr22  15.10.2011  1   //(ROW 7)

当我选择_person_id_2 = pe22date_of_begin = 13.10.2011date_of_end = 15.10.2011时,我希望得到这样的结果:

 pe22   pr1   13.10.2011  1   //(ROW 2)
 pe22   pr22  13.10.2011  1   //(ROW 6)
 pe22   pr22  15.10.2011  2   //(ROWS 9,10)

我正在使用SQL Server 2008.希望您了解我想要问的内容。

1 个答案:

答案 0 :(得分:4)

您是否需要group by子句+ count聚合函数:

Select 
   _person_id, _project_id, date_of_hour, count(*)
from
   myDataTable
where 
   _person_id = 'pe1'
 and
   date_of_hour between '13.10.2011' and '15.10.2011'
group by 
 _person_id, _project_id, date_of_hour

注意:据我所知,当你写'13 .10.2011'时,你谈的是一个成熟的日期,而date_of_hour是以日期或日期时间格式。如果不是这种情况,您应该将cast字符串和列设置为有效日期。