Несколько условных подсчетов для одного поля в SQL - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть две таблицы, одна из которых содержит подробности об авторах, а другая - детали статьи.У одного автора может быть много статей.В таблице товаров есть поле, озаглавленное «Решение»

Поле решения может быть «Принят» или «Отклонено».Я хочу, чтобы запрос выводил таблицу с именем и идентификатором автора, а затем подсчитывал их количество представлений, принимает и отклоняет.Возникает проблема (я довольно новичок в SQL, так что терпите меня), потому что в данный момент я использую WHERE Article.Decision = "Accept" или что-то подобное, и не могу найти, как встроить отдельные зависимости на другие сгенерированные полябез нарушения синтаксиса.Любая помощь высоко ценится!

Извинения, здесь текущий оператор SQL, который возвращает авторов, у которых есть совпадение и количество.Хорошо было бы просто выражение для возврата этой таблицы авторам с нулевым счетчиком (тогда я мог бы просто добавить отдельные запросы для построения всего этого)

SELECT Authors.[Corresponding Author URN], Authors.[Corresponding Author Surname], Count(Articles.Decision) AS CountOfDecision
FROM Authors LEFT OUTER JOIN Articles ON Authors.[Corresponding Author URN] = Articles.[Corresponding Author URN]
WHERE (((Articles.Decision)="Rejected"))
GROUP BY Authors.[Corresponding Author URN], Authors.[Corresponding Author Surname];

URN - это идентификатор.

Ответы [ 3 ]

4 голосов
/ 28 сентября 2010

Вы можете использовать оператор case:

select   sum(case when Decision = 'Rejected' then 1 else 0 end) as RejectedCount
,        sum(case when Decision = 'Denied' then 1 else 0 end) as DeniedCount
,        sum(case when Decision = 'Discarded' then 1 else 0 end) as DiscardedCount
,        sum(case when Decision = 'Buried' then 1 else 0 end) as BuriedCount

EDIT: В Access вы можете использовать iif вместо case, например:

select   sum(iif(Decision="Delayed",1,0)) as DelayedCount
,        sum(iif(Decision="Ignored",1,0)) as IgnoredCount
,        sum(iif(Decision="Repulsed",1,0)) as RepulsedCount
,        sum(iif(Decision="Declined",1,0)) as DeclinedCount
0 голосов
/ 29 сентября 2010

Вы также можете использовать кросс-таблицу, но я не буду публиковать SQL для этого, поскольку я всегда просто использую QBE для создания кросс-таблиц. Волшебник должен провести вас через это. Результатом будут строки со столбцами имени, за которыми следует столбец для каждого значения в столбце «Решение» (столбец «Принято» и «Отклонено») и количество для каждого.

0 голосов
/ 28 сентября 2010
SELECT 
         Authors.[Corresponding Author URN],
         Authors.[Corresponding Author SURNAME],
         SUM(CASE WHEN decision = 'Rejected' THEN 1 ELSE 0 END) Rejected,
         SUM(CASE WHEN decision = 'Accepted' THEN 1 ELSE 0 END) Accepted
FROM 
         Authors LEFT OUTER JOIN Articles ON Authors.[Corresponding Author URN] = Articles.[Corresponding Author URN]
GROUP BY 
         Authors.[Corresponding Author URN], Authors.[Corresponding Author Surname];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...