对于超出标准的记录,按组编号记录0编号

时间:2009-11-27 22:19:54

标签: sql-server tsql

需要一根绳子;))看看例子:

我有一张桌子:

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 个答案:

答案 0 :(得分:1)

将结果检查从WHERE子句移动到CASE:

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

这样,您将看到只有成功安装的软件。