Как получить строки, которые не совпадают с условиями в запросе, используя сумму - PullRequest
2 голосов
/ 18 января 2012
SELECT k.condition, 
       SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
       SUM(IIf(AnimalType=4,1,0)) as Herbivore
From Animals a inner join knownconditions k on a.id = k.id
where a.id in (3, 11, 12)
AND (AnimalType=3 OR AnimalType = 4)
Group by a.id, k.id

Приведенный выше запрос выводит всех животных с определенным типом состояния.Например:

Condition   | Carnivore | Herbivore
------------| ----------|-------------
Condition1  | 33        | 3
Condition2  | 2         | 4

Для примера рассмотрим, что в таблице knownconditions есть запись, такая как ниже

ID    | Condition
------|------------
3     | Condition3

К счастью, в таблице Animals нет животныхимеет условие Condition3.Поэтому в моем запросе выше даже нет списка Condition3.

Как я могу изменить свой запрос так, чтобы полученные результаты были:

Condition   | Carnivore | Herbivore
------------| ----------|-------------
Condition1  | 33        | 3
Condition2  | 2         | 4
Condition3  | 0         | 0

Ответы [ 3 ]

0 голосов
/ 18 января 2012

Возьми левое соединение как Animals Vs. knownconditions. Так что животные будут учитываться в соответствии с условиями. Если условие не удовлетворяет, оно вернет 0.

SELECT k.condition, 
       SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
       SUM(IIf(AnimalType=4,1,0)) as Herbivore
From Animals a LEFT JOIN knownconditions k on a.id = k.id
AND a.id in (3, 11, 12)
AND (AnimalType=3 OR AnimalType = 4 ) 
Group by a.id, k.id

Пожалуйста, прокомментируйте, если работаете. Я не проверял это.

0 голосов
/ 18 января 2012

Другой подход с использованием литералов и объединения:

SELECT condition, SUM(Carnivore), SUM(Herbivore)
FROM
(
    SELECT k.condition, 
       SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
       SUM(IIf(AnimalType=4,1,0)) as Herbivore
    From Animals a inner join knownconditions k on a.id = k.id
    where a.id in (3, 11, 12)
    AND (AnimalType=3 OR AnimalType = 4)
    Group by k.condition, a.id, k.id
    UNION
    SELECT condition, 0, 0
    From knownconditions
)
GROUP BY condition
0 голосов
/ 18 января 2012

Преобразовать во внешнее объединение:

SELECT k.condition,  
   SUM(IIf(AnimalType=3,1,0)) AS Carnivore,  
   SUM(IIf(AnimalType=4,1,0)) as Herbivore 
From knownconditions k 
  Left join Animals a  
      on a.id = k.id 
         And a.id in (3, 11, 12) 
         And AnimalType In (3, 4) 
Group by k.id, a.id 

Это создаст все условия в известных условиях и для каждого типа животных общее количество записей в известных условиях, в которых есть каждое условие.

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