1

SQL Server 2008 R2 で作業しています。と という 2 つのテーブルがTblGroupありTblComplatedDetailsます。

TblGroup には、グループの名前が含まれてMemberIdおりGroupType (i.e. in Daily, Weekly, Start, End)、完全な日時TblComplatedDetailsが含まれています。ここで、TblCompletedDetails にレコードがない場合にのみ、グループの AND "Start" タイプを除くGroupId (i.e. foreign key of TblGroup)特定のすべてのグループが必要です。したがって、レコード セットは次のようになります。MemberIdGroupType="End"

TblGroup 
==================================
Id  MemberId    GroupType
==================================
1   1       Daily
2   2       Daily
3   3       Daily
4   1       Weekly
5   1       Start
6   2       Weekly 
7   2       Start 
8   2       End
9   1       End
10  1       End


TblCompletedDetails
======================================
Id  GroupId     CompletedDate
======================================
1   1       xxxxxxxxxxxxxx
2   2       xxxxxxxxxxxxxx
3   3       xxxxxxxxxxxxxx
4   4       xxxxxxxxxxxxxx
5   1       xxxxxxxxxxxxxx
6   2       xxxxxxxxxxxxxx
7   3       xxxxxxxxxxxxxx
8   5       xxxxxxxxxxxxxx
9   6       xxxxxxxxxxxxxx

したがって、MemberId = 1 の場合、目的のグループは次のようになります。

=======
GroupId
=======
1
4

しかし、MemberId = 2 の場合、望ましい結果は次のとおりです。

=======
GroupId 
=======
2
6
7

7 は、TblCompletedDetails に外部キーを持たないグループの「開始」タイプであるためです。誰でも考えられますか?貴重なご回答をお待ちしております。

4

1 に答える 1

2
select g.ID GroupID
  from TblGroup g
 where g.MemberID = @MemberID
   and g.GroupType <> 'end'
   and
   (
       -- Row is qualified if it is not start
          g.GroupType <> 'start'
       -- Or, if it is, does not have an entry in TblCompletedDetails
       or not exists (select *
                        from TblCompletedDetails d
                       where d.GroupId = g.ID)
   )
于 2012-07-18T10:03:43.623 に答える