2012-02-03 54 views
2

我想比較和統計同一個數據庫中的行。如何比較同一個表中的行?

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的希望你明白我試圖問。

回答

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字符串和列轉換爲有效日期。

+0

日期的格式是好的,謝謝這段代碼適合我,非常簡單:) – JanOlMajti 2012-02-03 09:33:38