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

Нужна веревка;)) Взгляните на пример:

У меня есть таблица:

CREATE TABLE [dbo].[test3](
    [software] [varchar](50) NOT NULL,
    [result] [bit] NOT NULL,
    [computername] [varchar](50) NOT NULL
) 

С данными:

INSERT INTO test3 VALUES ('Adobe',1,'abc')
INSERT INTO test3 VALUES ('Office',1,'abc')
INSERT INTO test3 VALUES ('Adobe',0,'def')
INSERT INTO test3 VALUES ('Office',1,'def')

Итак, после обычного SELECT имеем:

software                                           result computername
Office                                             1      abc
Adobe                                              1      abc
Office                                             1      123
Adobe                                              0      123

СЕЙЧАС, мой вопрос. Я хотел бы посчитать количество программного обеспечения по программной группе. Столбец «Результат» означает: 0 не установлено, 1 установлено.

Для подсчета всех установленных (результат = 1) я могу сделать просто:

SELECT
    Software
    ,COUNT(*) as Quantity
FROM
    test3
WHERE
    result = 1
GROUP BY
    software

НО, если я хочу "отменить" результат и посчитать, сколько компьютеров из таблицы не установлено программное обеспечение (результат = 0), я не увижу результаты, которые мне нужны (для отчета).

После этого:

SELECT
    Software
    ,COUNT(*) as Quantity
FROM
    test3
WHERE
    result = 0
GROUP BY
    software

Я получу:

Software                                           Quantity
-------------------------------------------------- -----------
Adobe                                              1

Что означает: «пропущен только 1 Adobe, а остальное программное обеспечение установлено везде».

Но мне нужно, чтобы отчет выглядел примерно так:

Software                                           Quantity
-------------------------------------------------- -----------
Adobe                                              1
Office                                             0

Что означает;) "Пропущена только 1 установка Adobe, а установка 0 Office пропущена."

Я застрял с этим: / Plz help:)

1 Ответ

1 голос
/ 28 ноября 2009

Переместите проверку результата из предложения WHERE в CASE:

SELECT
    Software
,   SUM(case when result = 0 then 1 else 0 end) as Missing
FROM     test3
GROUP BY software

Таким образом, вы увидите программное обеспечение, которое имеет только успешные установки.

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