Проблема с использованием двух Count () в одном столбце - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь получить два разных счета в одном столбце.Два подсчета работают хорошо, когда в отдельных запросах, но я просто не уверен, как объединить их в один запрос.У меня есть две таблицы, которые DailyFieldRecord и AB953.DailyFieldRecord содержит: DailyFieldRecordID и ActivityCodeID.Таблица AB953 содержит: DailyFieldRecordID, ItemID, and GroupID.Count1 вернет счетчик DailyfieldrecordID's, который содержит ActivityCodeID=387 и GroupID=260 и который НЕ имеет ItemID in (1302,1303,1305,1306).Count2 вернет счетчик DailyfieldrecordID's, который содержит ActivityCodeID=387 и GroupID=260, и который имеет ItemID in (1302,1303,1305,1306).Так что они похожи, но я просто не уверен, как объединить их в один запрос.Я помещаю OR в условие where между двумя ограничениями, что, как я знаю, неверно, но я просто не знаю, как это сделать.

    DailyFieldRecord:                   AB953:
DailyFieldRecordID ActivityCodeID    DailyFieldRecordID:  ItemID: GroupID:
   657                 387                657               1305    210
   888                 420                657               1333    260
   672                 387                657               1335    260  
                                          888               1302    210
                                          888               1336    260
                                          672               1327    260
                                          672               1334    260 
                                          672               1335    260
Expected Output:
Count1:      Count2:
   3            2
Count1 is supposed to count:                Count2 is supposed to count:
   672    1327    260                  657     1333     260
   672    1334    260                  657     1335     260
   672    1335    260

SELECT COUNT(ActivityCodeID) as Count1, COUNT(ActivityCodeID) As Count2
    FROM AB953 ab
    JOIN DailyFieldRecordID dfr on 
         dfr.DailyFieldRecordID=ab.DailyFieldRecordID

     WHERE dfr.ActivityCodeID=387 and ab.GroupID=260 and NOT exists(
          select b.DailyFieldRecordID
          FROM DailyFieldRecordID b
          WHERE ab.DailyFieldRecordID = b.DailyFeildRecordID AND 
                b.ItemID in (1302,1303,1305,1306))
     OR
          dfr.ActivityCodeID=387 and ab.GroupID=260 and exists(
          select b.DailyFieldRecordID
          FROM DailyFieldRecordID b
          WHERE ab.DailyFieldRecordID = b.DailyFeildRecordID AND 
                b.ItemID in (1302,1303,1305,1306))

1 Ответ

0 голосов
/ 28 июня 2019

Сначала найдите список DailyFieldRecordID для ItemID in (1302,1303,1305,1306) (запрос 1), а затем включите запрос в ваш окончательный запрос.

SQL Fiddle

Запрос 1:

SELECT AB1.DailyFieldRecordID,SUM(CASE WHEN AB1.ItemID IN (1302,1303,1305,1306) THEN 1 ELSE 0 END)
FROM AB953 AB1
GROUP BY AB1.DailyFieldRecordID

Окончательный запрос:

SELECT SUM(CASE WHEN EX=0 THEN 1 ELSE 0 END) AS COUNT1,SUM(EX) AS COUNT2
FROM AB953 ab
INNER JOIN DailyFieldRecord dfr
    ON dfr.DailyFieldRecordID = ab.DailyFieldRecordID
LEFT JOIN ( SELECT AB1.DailyFieldRecordID,SUM(CASE WHEN AB1.ItemID IN (1302,1303,1305,1306) THEN 1 ELSE 0 END) AS EX
            FROM AB953 AB1
            GROUP BY AB1.DailyFieldRecordID) T
    ON dfr.DailyFieldRecordID = T.DailyFieldRecordID
WHERE dfr.ActivityCodeID = 387
    AND ab.GroupID = 260
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...