2009-11-27 89 views
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 Adob​​e正在錯過了和其他軟件的安裝無處不在」。

但我需要的報告類似的東西很好看:

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

這意味着,)「只有1安裝的Adobe錯過和0 Office安裝錯過。」

我堅持與:/ PLZ幫助:)

+0

您需要存儲每個軟件的許可證數量,我建議在單獨的表格中進行。 – 2009-11-27 22:25:56

+0

在正常情況下,當然。但是那只是掃描日誌的報告,並沒有用於其他任何領域。 – binball 2009-11-27 23:04:28

回答

1

移動從WHERE子句的情況下,結果檢查:

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

這樣的話,你會看到軟件,只有成功安裝。

+0

看起來很完美:)我希望案例陳述不會太多影響性能。非常感謝! – binball 2009-11-27 23:11:30