1

ここにいる誰かにとって簡単なポイントとして、次のデータの表を見てください。

EventCode  ProcessId
---------- ---------
2          1
-6         3
42         1
-6         2
-12        2
23         4
4          2
-23        1
12         3
-26        1

負のイベント コードがあるすべてのプロセス ID のカウントを取得するクエリが必要です。上記のデータセットから、結果は 3 になります (プロセス ID の 1、2、および 3 には負のイベント コードがありますが、プロセス ID 4 にはありません)。

おそらく、グループを含む非常に単純なことですが、木に木が見えないだけです。

関連する余談ですが、このテーブルには何百万もの行があります。

4

5 に答える 5

4
SELECT COUNT(DISTINCT ProcessID) FROM table
WHERE EventCode < 0
于 2012-06-28T19:28:36.367 に答える
1

簡単な答えは

SELECT COUNT(DISTINCT t.ProcessId)
  FROM mytable t
 WHERE t.EventCode < 0
   AND t.ProcessId IS NOT NULL

(ProcessId に述語を含める必要はありません。COUNT には NULL 値が含まれないことを指摘するためにここに記述します。)

これは最も単純なアプローチですが、唯一の方法ではありません。

他の可能なクエリのパフォーマンスは、実際にはテーブルの構成 (HEAP または CLUSTERED) と、使用可能なインデックスに依存します。

于 2012-06-28T19:29:33.677 に答える
1

同じ ProcessId に複数の負の値がある場合:

SELECT COUNT(DISTINCT ProcessId) FROM table WHERE EventCode < 0;
于 2012-06-28T19:30:02.030 に答える
1

カウントをグループ化する場合は、次のProcessIdようにします。

SELECT COUNT(*), [ProcessId] 
FROM TBL
WHERE [EventCode] < 0
GROUP BY [ProcessId]

負の数全体が必要な場合:

SELECT COUNT(DISTINCT([ProcessId])) FROM Tbl WITH (NOLOCK) WHERE [EventCode] < 0

パフォーマンスのために: column にフィルター処理された非クラスター化インデックスを作成し、 columnEventCodeを含めます。ProcessIdここでEventCode< 0 です。

于 2012-06-28T19:30:24.867 に答える
-1

あなたがそれを意味することを願っています:

select count(*) from (YourTableNameHere) where EventCode < 0

于 2012-06-28T19:27:10.697 に答える