2
Select    GroupId,
          count(distinct GroupProgramYearParticipantID)as [ChildAddedprior]  
from      #temp1 
Where     (MonthFlag = '1') 
and       (ParticipantTypeName = 'child')  
and       (GroupProgramYearParticipantID not in 
          (Select  distinct GroupProgramYearParticipantID 
           from    #temp1 t 
           Where   (t.MonthFlag = '2') 
           and     (t.ParticipantTypeName = 'child') 
           and     t.GroupId = GroupId)) 
group by  groupId

groupID 1 が GroupProgramYearParticipantID の 1,2,2,3,4,4 を持ち、groupID 2 が GroupProgramYearParticipantID の 2,4,4,5,5,6,7 を持っている場合

上記のクエリは戻ります

GroupID-1 ChildAddedprior- 4( which takes 1,2,3,4)
DroupID-2 ChildAddedPrior- 5(which includes 2,4,5,6,7)

しかし、私が欲しいのは

GroupID-1 ChildAddedprior- 4 (which takes 1,2,3,4)
DroupID-2 ChildAddedPrior- 3 (which includes 5,6,7)(this doesn't include 2,4 which are counted earlier).

助けていただければ幸いです

4

3 に答える 3

0

これはあなたの要件を満たしていますか?

select GroupId, count(GPYPId) [Count]
from (
    select distinct min(GroupId) GroupId, GroupProgramYearParticipantID GPYPId
    from #temp1
    group by GroupProgramYearParticipantID
) tblA
group by GroupId;

MonthFlag は考慮されません。

于 2013-10-15T22:05:12.457 に答える
0

それを達成するために2つのクエリを使用できます。

  1. 最初のグループの ID を一時テーブルに選択します。

  2. 2 番目のグループを選択するときは、一時テーブルに存在する ID を選択しないでください。

または、クエリの結果 (id) を取得し、共通のテーブル式を使用して、最初のグループから再帰的にグループをカウントし、既にカウントしたグループからアイテムを除外することもできます。

于 2013-10-15T21:35:20.333 に答える