2017-05-02 10 views
0

これはかなり基本的かもしれませんが、ここでははるかに速くなると思いました。私はNoShowsの両方の合計の組み合わせを持っている人を排除しようとしてキャンセルしてるHAVING句のフィールドの組み合わせを除外します。

+----------+----------+---------+ 
    | PersonID | No Shows | Cancels | 
    +----------+----------+---------+ 
    |  1 |  2 |  0 | 
    |  1 |  5 |  1 | 
    |  1 |  0 |  0 | 
    |  2 |  0 |  0 | 
    |  2 |  0 |  0 | 
    |  3 |  1 |  0 | 
    |  3 |  0 |  0 | 
    |  4 |  1 |  1 | 
    |  4 |  3 |  2 | 
    |  4 |  0 |  0 | 
    +----------+----------+---------+ 

0例:として:PersonID=2

試み:

SELECT 
    PersonID 
    ,SUM(NoShows) AS TotalNS 
    ,SUM(Cancels) AS TotalCanc 

FROM Table1 
GROUP BY PersonID 
HAVING SUM(NoShows) > 0 AND SUM(Cancels) > 0 

これは明らかにので、動作しません。 NoShowsまたはCancelsのいずれかが0の場合、人物の削除を開始します。例:PersonID=3

希望出力:

+--------------+----------+---------+ 
|  PersonID | No Shows | Cancels | 
+--------------+----------+---------+ 
|   1 |  7 |  1 | 
|   3 |  1 |  0 | 
|   4 |  4 |  3 | 
+--------------+----------+---------+ 
+1

ANDの代わりにOR? – ZLK

+0

@ZLK私は仕事で長い一日を過ごしたと思います。 – AS91

+0

@ G.Arima Person 3は、取り消し= 0なので削除されます。しかし、私はNoShows!以来それらをしたいです!0 0 – AS91

答えて

0

問題が発生した場合に備えて、これを試してみてください。

SELECT 
    PersonID 
    ,SUM(NoShows) AS TotalNS 
    ,SUM(Cancels) AS TotalCanc 

FROM Table1 
GROUP BY PersonID 
HAVING SUM(NoShows) > 0 or SUM(Cancels) > 0 
0

あなたの質問は次のとおりです。

私だけNoShowsの合計 両方の組み合わせを持っているとEG 0としてキャンセルしたものを取得しようとしている:PERSONID = 2

答えは:

SELECT PersonID 
FROM Table1 
GROUP BY PersonID 
HAVING SUM(NoShows) = 0 AND SUM(Cancels) = 0; 

私はあなたが受け入れる理由は不明です異なる論理を持つ答え。

+0

ゴードンを指摘してくれてありがとう。私は質問を編集して今や意味をなさないようにしました。私の悪い。 – AS91

関連する問題