Проблема подсчета предметов в отдельной строке без дублирования - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь написать запрос, который будет включать в себя счет для основного и дополнительного действия, только когда идентификатор группы = 260 и идентификатор элемента в (1302,1303,1305,1306) для каждого отдельного RecordID. До сих пор мне удавалось выделить строки с этими условиями, но я хочу подсчитать первичные и вторичные действия только один раз (потому что первичные и вторичные действия одинаковы для их соответствующего 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 голосов
/ 23 июня 2019

Вы должны быть более понятны, когда объясняете структуру таблиц, которые вы используете.Тем не менее, я достигаю ожидаемого результата, начиная с вашей примерной таблицы:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...