1

以下を生成するクエリがあります。

Team  | Member  |  Cancelled | Rate
-----------------------------------
  1     John         FALSE      150
  1     Bill         TRUE        10
  2     Sarah        FALSE      145
  2     James        FALSE      110
  2     Ashley       TRUE         0

私が必要とするのは、キャンセルが false であるチームのメンバー数と、キャンセルされたステータスに関係なくレートの合計を選択することです...次のようなものです:

SELECT
    Team,
    COUNT(Member),    --WHERE Cancelled = FALSE
    SUM(Rate)         --All Rows
FROM
    [QUERY]
GROUP BY
    Team

したがって、結果は次のようになります。

Team  |  CountOfMember | SumOfRate
----------------------------------
  1           1                160
  2           2                255

これはほんの一例です。実際のクエリには複数の複雑な結合があります。レートの合計に対して1つのクエリを実行し、次にカウントに対して別のクエリを実行して、それら2つの結果を結合できることはわかっていますが、負担が少なく、すでにコピーして貼り付ける必要がない、より簡単な方法はありますか複雑なクエリ?

4

1 に答える 1

12

次のような条件付き合計が必要です。

sum(case when cancelled = 'false' then 1 else 0 end)

を使用する理由sum()。はsum()レコードを処理し、値を追加してい0ます1。値は の値に依存しますcancelled。false の場合、 は-- そのようなsum()1の数を数えます。

次のように、 で同様のことができますcount()

count(case when cancelled = 'false' then cancelled end)

ここでの秘訣は、count()NULL 以外の値の数を数えることです。このthen句は、NULL 以外の任意のものcancelled、定数1、またはその他のフィールドにすることができます。else がない場合、他の値は変換されNULL、カウントされません。

私は常にsum()バージョンよりもバージョンを好んでいましたcount()。SQL の他の方言では、次のように短縮できる場合があります。

sum(cancelled = 'false')

これは、慣れると非常に理にかなっています。

于 2013-06-18T23:20:31.287 に答える