2012-03-26 120 views
3
SELECT 'COUNT=' + CONVERT(VARCHAR(64), COUNT(s.company)) AS sites 
FROM site s 
WHERE s.sitetype = 'om' 
     AND s.status = 1 
EXCEPT 
SELECT DISTINCT sg.company 
FROM snmpmibdevice AS sdevice 
     JOIN site sg 
     ON sg.guid = sdevice.siteguid 
     JOIN snmpmibdata sdata 
     ON sdata.snmpmibdeviceguid = sdevice.snmpmibdeviceguid 
WHERE sdata.sampletimestamp > Dateadd (mi, -15, Getutcdate()) 
     AND sg.sitetype = 'OM' 

基本上我試圖從此返回公司名稱的計數。如果我刪除了計數並選擇「S.Company」,我會得到2個值(我想「COUNT = 2」),但是計數會記錄爲34條記錄(COUNT = 34)。SQL:如何使用EXCEPT時得到COUNT

我將不勝感激任何幫助。謝謝!

+1

[即時SQL格式化程序(http://www.dpriver.com/pp/sqlformat.htm)。用它。愛它。 – 2012-03-26 15:34:06

+0

在這種情況下它並不重要,但是您希望計算多少行?:** VARCHAR(64)**?如果你有最寬的8字節bigint值'CONVERT(varchar(20),COUNT(s.company))'就足夠了。 – 2012-03-26 20:26:05

+1

'... EXCEPT SELECT DISTINCT ...' - 你不需要'DISTINCT'關鍵字,因爲'EXCEPT'默認是'EXCEPT DISTINCT'(奇怪的是,SQL Server不支持顯式的'EXCEPT DISTINCT'和生成「不正確的語法」錯誤,而「EXCEPT ALL」生成更有意義的錯誤,「EXCEPT運算符的'ALL'版本不受支持」)。事實上,即使你想,也不能重寫'EXCEPT DISTINCT'即......'除了全部選擇...'還是會給你'DISTINCT'的結果......這是件好事:) – onedaywhen 2012-03-27 08:53:25

回答

7

包住整個事情的 「從SELECT COUNT(*)()」

SELECT 'COUNT=' + CONVERT(VARCHAR(64), COUNT(company)) AS sites 
FROM (

    SELECT s.company 
    FROM site s 
    WHERE s.sitetype = 'om' 
      AND s.status = 1 
    EXCEPT 
    SELECT DISTINCT sg.company 
    FROM snmpmibdevice AS sdevice 
      JOIN site sg 
      ON sg.guid = sdevice.siteguid 
      JOIN snmpmibdata sdata 
      ON sdata.snmpmibdeviceguid = sdevice.snmpmibdeviceguid 
    WHERE sdata.sampletimestamp > Dateadd (mi, -15, Getutcdate()) 
      AND sg.sitetype = 'OM' 
) a 
+0

這個效果很好。非常感謝! – xnttx 2012-03-26 15:36:39