0


0

Подсчет записей по группе с номером 0 для записей вне критериев

Нужна веревка;)) Посмотрите на пример:

У меня есть стол:

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, помогите :)

1 Answer


1


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

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

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