2012-03-26 17 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) "()からSELECT COUNT(*)" の全体を包みます。これを使って。大好きです。 –

+0

このコンテキストでは実際には関係ありませんが、カウントする行数はいくつですか?** VARCHAR(64)**?最も広い8バイトのbigint値を持っていれば、 'CONVERT(varchar(20)、COUNT(s.company))'で十分でしょう。 –

+1

'... EXCEPT SELECT DISTINCT ...' - 'EXCEPT'はデフォルトで' EXCEPT DISTINCT'を意味するので、 'DISTINCT'キーワードは必要ありません(奇妙なことに、SQL Serverは明示的な' EXCEPT DISTINCT'をサポートしていません。 'EXCEPT ALL'はより意味のあるエラーを生成しますが、 'EXCEPT演算子の' ALL 'バージョンはサポートされていません。実際には、 'EXCEPT DISTINCT'をオーバーライドすることはできません。つまり、' ... EXCEPT SELECT ALL ... 'は' DISTINCT'の結果を返します。これは良いことです:) – onedaywhen

答えて

7

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

関連する問題