【问题标题】:Filter out combination of fields in HAVING clause过滤掉 HAVING 子句中的字段组合
【发布时间】:2017-09-30 14:47:19
【问题描述】:

我知道这可能很基本,但我认为在这里会更快。

    +----------+----------+---------+
    | 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 |
    +----------+----------+---------+

我正在尝试消除将 NoShows 和 Cancels 组合为 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 |
+--------------+----------+---------+

【问题讨论】:

  • OR 而不是 AND?
  • @ZLK 我想我已经度过了漫长的一天。
  • @G.Arima Person 3 将被删除,因为他们的 cancels=0。但我想要它们,因为 NoShows !=0
  • 是的,我想,这就是为什么在几秒钟内发布正确答案的原因

标签: sql sql-server sql-server-2012 group-by having


【解决方案1】:

你的问题是:

我试图只获得那些同时具有两者的 Total NoShows 和 Cancels 为 0。例如:PersonID=2

答案是:

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

我不清楚你为什么会接受不同逻辑的答案。

【讨论】:

  • 感谢戈登指出这一点。我已经编辑了这个问题,以便现在有意义。我的错。
【解决方案2】:

试试这个,如果您遇到任何困难,请告诉我。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 2017-02-06
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多