在不重复的情况下对单个行中的项目进行计数问题

时间:2019-06-23 03:55:54

标签: tsql

我试图编写一个查询,该查询仅在每个单独的RecordID的组ID = 260和项目ID in(1302,1303,1305,1306)中时才包含主要活动和次要活动的计数。到目前为止,我已经能够使用这些条件来选择行,但是我只想对一次和次要活动进行一次计数(因为无论有多少行,首要和次要活动的对应RecordID都是相同的),如果它们不为null,则不管有多少RecordID与这些条件匹配。

RecordID:      GroupID:     ItemID:       PrimActivity:    SecActivity:
  320            260          1302            36                 0
  320            260          6456            36                 0 
  320            312          1303            36                 0
  560            400          1302            46                48
  560            312          1305            46                48
  460            260          1305            45                56
  460            260          1302            45                56



 Result I'm getting:
 RecordID:           Count:
   320                 2
   460                 4


 Expected result:
 RecordID:           Count:
   320                 1
   460                 2

SELECT dfr.RecordID,
       COUNT(CASE WHEN dfr.PrimActivity <> 0 and a.GroupID =260 then 1 
       ELSE NULL END) +
       COUNT(CASE WHEN dfr.SecActivity <> 0 and a.GroupID =260 then 1 ELSE 
       NULL END) AS Count
From ActivityItem ai
Join DailyRecord dfr on ai.PrimActivity = dfr.PrimActivity
Join AreaInfo af on af.AreaInfoID = dfr.AreaInfoID
Join Information a on dfr.RecordID = a.RecordID
Join Lookup lp on lp.ItemID = a.ItemID 

WHERE a.GroupID like '260' and EXISTS(
      SELECT b.RecordID, b.GroupID, b.ItemID
      FROM  Areainfo b
      where a.RecordID=b.RecordID and b.ItemID IN(1302,1303,1305,1306)
GROUP BY dfr.RecordID

1 个答案:

答案 0 :(得分:0)

当您解释所用表的结构时,您应该更加清楚。但是,从您的样本表开始,我达到了预期的结果:

SELECT RecordID,COUNT(*) as Count
FROM (SELECT DISTINCT RecordID,ItemID,PrimActivity,SecActivity
      FROM [TABLE YOU POSTED]
      WHERE GroupID = 260 and ItemID in (1302,1303,1305,1306) ) A
GROUP BY RecordID