Проблема с использованием двух разных sum () в одном столбце - PullRequest
0 голосов
/ 29 июня 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). Я пытаюсь получить только число GroupID =260 для каждого DailyFieldRecordID, которое соответствует вышеуказанным ограничениям.

    DailyFieldRecord:                   AB953:
DailyFieldRecordID ActivityCodeID    DailyFieldRecordID:  ItemID: GroupID:
   657                 387                657               1305    210
   888                 420                657               1333    260
   672                 387                657               1335    260
                                          657               1302    210
                                          657               1334    260
                                          657               1111    111                                              
                                          888               1302    210
                                          888               1336    260
                                          672               1327    260
                                          672               1334    260 
                                          672               1335    260
                                          672               1322    260
                                          672               1222    420

Expected Output:
Count1:      Count2:
   4            3
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                  657     1334     260
   672    1322    260

Current Count:
 Count1:       Count2:
   4              6


SELECT sum(CASE WHEN ex=0 THEN 1 ELSE 0 END) AS COUNT1,sum(EX) AS COUNT2
FROM AB953 ab
JOIN DailyFieldRecord dfr
       ON dfr.DailyFieldRecordID = ab.DailyFieldRecordID
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

1 Ответ

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

Сначала необходимо идентифицировать все DailyFieldRecordID s, у которых есть любой из ItemID s, что и делает здесь подзапрос.Затем вы можете определить, принадлежит ли запись во внешнем запросе к Count1 или Count2, основываясь на том, где она существует или нет в результирующем наборе подзапроса.

select sum(case when i.DailyFieldRecordID is null then 1 else 0 end) as Count1
, sum(case when i.DailyFieldRecordID is null then 0 else 1 end) as Count2
from AB953 as ab
inner join DailyFieldRecord as dfr on ab.DailyFieldRecordID = dfr.DailyFieldRecordID
left join (
            select distinct a.DailyFieldRecordID
            from AB953 as a
            where a.ItemID in (1302, 1303, 1305, 1306)
            ) as i on ab.DailyFieldRecordID = i.DailyFieldRecordID
where dfr.ActivityCodeID = 387
and ab.GroupID = 260

Конечный результат:

+--------+--------+
| Count1 | Count2 |
+--------+--------+
| 4      | 3      |
+--------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...