SQL Serverで特定の列データの出現を数えています。SQL、列内のデータの数、望ましくない結果は?
基準は、そのスタッフに割り当てられた一意の番号を使用してスタッフのデータを取得することです。カウントは2つの日付の間にある必要があります。
この
は、私は、これまで私は値Data_1
を数えています を持っており、それは数だ列
Staff_No
から列名
Info_Data
、
BETWEEN '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
だから、列cCount
にData_1
のすべての出現をカウントしているようだと行に9
回繰り返します。それは以下のようになります。
No | Staff_No | Info_Data | cCount
1 | 3201 | Data_1 | 9
希望する結果を得るためにSQLを修正するにはどうすればよいですか?私はWHERE
が間違った場所にあると推測していますが、何か他に働くことはできません。
あなたはStaff_Time_TBLに日付を数えないように参加していますが、各info_dataに対して発生したすべての件数を取得するだけです。編集:私はあなたがなぜ結合を必要としているか分かりません。あなたのStaff_Time_TBLの出現回数を、あなたの日付とグループの間の日付をstaff_no、info_data – ZLK
で計るだけです。 '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
@ZLK、それは完全に動作します。ところで、それはDATETIMEではないDATEです。以前はお尻に少し噛み付きました。あなたが答えを追加したいなら、私は投票して、将来の参考のために解答としてマークしたいと思います。 – KyloRen