2016-07-14 10 views
0

SQL Serverで特定の列データの出現を数えています。SQL、列内のデータの数、望ましくない結果は?

基準は、そのスタッフに割り当てられた一意の番号を使用してスタッフのデータを取得することです。カウントは2つの日付の間にある必要があります。

この

は、私は、これまで私は値 Data_1を数えています を持っており、それは数だ列 Staff_Noから列名 Info_DataBETWEEN '2016/6/15' AND '2016/7/16'で発生回数 3201

SELECT S.Staff_No, S.Info_Data, C.cCount 
    FROM Staff_Manager.dbo.Staff_Time_TBL S 
     INNER JOIN (SELECT Info_Data, count('Data_1') as cCount 
        FROM Staff_Manager.dbo.Staff_Time_TBL 
        GROUP BY Info_Data) C ON S.Info_Data = C.Info_Data 
        WHERE Staff_No = 3201 AND Date_Data BETWEEN '2016/6/15' AND '2016/7/16' 

結果があるものです私が期待していたものではなく、以下の通りです。 Data_1は、これら2つの日付の間に9回発生します。

No | Staff_No | Info_Data | cCount 
1 | 3201  | Data_1  | 3456 
2 | 3201  | Data_1  | 3456 
3 | 3201  | Data_1  | 3456 
4 | 3201  | Data_1  | 3456 
5 | 3201  | Data_1  | 3456 
6 | 3201  | Data_1  | 3456 
7 | 3201  | Data_1  | 3456 
8 | 3201  | Data_1  | 3456 
9 | 3201  | Data_1  | 3456 

だから、列cCountData_1のすべての出現をカウントしているようだと行に9回繰り返します。それは以下のようになります。

No | Staff_No | Info_Data | cCount 
1 | 3201  | Data_1  | 9 

希望する結果を得るためにSQLを修正するにはどうすればよいですか?私はWHEREが間違った場所にあると推測していますが、何か他に働くことはできません。

+0

あなたはStaff_Time_TBLに日付を数えないように参加していますが、各info_dataに対して発生したすべての件数を取得するだけです。編集:私はあなたがなぜ結合を必要としているか分かりません。あなたのStaff_Time_TBLの出現回数を、あなたの日付とグループの間の日付をstaff_no、info_data – ZLK

+0

で計るだけです。 'SELECT Staff_No、Info_Data、COUNT(*)cCount From Staff_Time_TBL Staff_No = 3201とDate_Data間の '2016/6/15' AND '2016/7/16' GROUP BY Staff_No、Info_Data'またはここで何か違うものをお探しですか?注:DateData列がDATEではなく、DATETIMEの場合は、BETWEENを使用することをお勧めします。 – ZLK

+0

@ZLK、それは完全に動作します。ところで、それはDATETIMEではないDATEです。以前はお尻に少し噛み付きました。あなたが答えを追加したいなら、私は投票して、将来の参考のために解答としてマークしたいと思います。 – KyloRen

答えて

1

希望の結果を得るには、グループ・バイ・ステートメントで通常のカウントを行うだけです。

あなたのクエリは実際には別の行として発生した時間の各々を取得して、日付を気にすることなく、あなたのStaff_Time_TBL(中Info_Data(「[データ1」)のすべてのオカレンスの数を示していたが何をやっていた
SELECT Staff_No, Info_Data, COUNT(*) cCount 
FROM Staff_Manager.dbo.Staff_Time_TBL 
WHERE Staff_No = 3201 
AND Date_Data BETWEEN '2016/6/15' AND '2016/7/16' 
GROUP BY Staff_No, Info_Data; 

これは、日付が結合の副問合せの一部ではないためです)。

+0

もう一度お手伝いいただき、ありがとうございました。 – KyloRen

関連する問題