2016-10-12 3 views
0

が私のテーブルには、ユーザーが複数のコースを持つことができます複数の列をグループ化するときにすべての列を取得するにはどうすればよいですか?ここで

UserDetail 

Id UserId CourseId SubjectId TeacherCode RDate  status 
1 1  1   1   1   08/02/2016  Waiting 
2 1  1   1   2   08/01/2016  Recceived 
3 1  1   1   3   08/02/2016  Processed 
4 1  1   2   1   08/03/2016  Recceived 
5 1  1   2   2   08/04/2016  Processed 
6 1  2   1   3   08/05/2016  Processed 
7 1  2   2   1   08/06/2016  Processed 

、複数subjects.Oneの先生が複数subject.Iを教えることができるである7のテーブル、個別のユーザーIDのベース、courseidとsubjectid.Outからすべての列を取得したいです行は4行しか表示しません。 我々はteachercode 1を選択した場合、その後、RDATEは Recceivedも加工どちらを待機するために2016年8月2日、ステータスすべき

Id UserId CourseId SubjectId TeacherCode RDate  status 
1 1  1   1   1   08/02/2016  Waiting 
2 1  1   1   2   08/01/2016  Recceived 
3 1  1   1   3   08/02/2016  Processed 

以下のいずれかのレコードが。 いずれか1つ未満

Id UserId CourseId SubjectId TeacherCode RDate  status 
4 1  1   2   1   08/03/2016  Recceived 
5 1  1   2   2   08/04/2016  Processed 

どのようにするには?

+0

なぜteacheridでuserdetailsテーブル? – jarlh

+0

テーブルが既に作成されています。変更できません。 –

+0

以下を参照する必要があります。https://msdn.microsoft.com/en-us/library/ms186734.aspx – Danieboy

答えて

1

あなたは、その区別されたデータのどの行を選択するかを知っておく必要があります。最初の行ですか?最後の行?

区別されたデータのグループごとに複数の行があるため、必要な行を選択する必要があります。

私はあなたがすべての区別されたグループの最初の行を望むと仮定します。 、SQL2005の+で

Select first(Id) AS Id, first(UserId) AS UserId, first(CrouseId) AS CourseId, first(SubjectId) AS SubjectId, first(TeacherId) AS TescherId,first(RDate) AS RDate, first(status) as status 
FROM UserDetail 
Group By UserId, CourseId, SubjectId 

以下のようにそれを実行します:あなたは、以下のようにそれを行うことができます

WITH temp AS (
SELECT *, 
     ROW_NUMBER() OVER(PARTITION BY UserId,CourseId,SubjectId ORDER BY Id) AS rn FROM UserDetail) 
SELECT t.* 
FROM temp t 
WHERE t.rn = 1 

それとも、代わりにWITHの選択内部使用してそれを行うことができます。

SELECT * 
FROM (SELECT *, 
     ROW_NUMBER() OVER(PARTITION BY UserId,CourseId,SubjectId ORDER BY Id) AS rn FROM UserDetail) 
WHERE rn = 1 
+0

こんにちはAmir Ziarati、SQL Server 2012を使用しています。query.errorの実行中にエラーが発生しました。 '最初の'は認識された組み込み関数名ではありません。 ' –

+0

使用 "トップ1 COLUMNNAME" ではなく;)私はthis.Queryのように使用 –

+0

:トップ1 [ID] を選択して、[ユーザーID] 、[CourseId] 、[SubjectId] 、[TeacherCode] 、[RDATE] 、[status] FROM [dbo]から[UserDetail] グループ[UserId]、[CourseId]、[SubjectId] idで注文 しかし、私はエラーが発生しています。グループ内のすべての列を集計するか、機能 –

関連する問題