Oracle SQL:将具有不同条件的WHERE语句组合在一起以列出聚合总计

Oracle SQL:将具有不同条件的WHERE语句组合在一起以列出聚合总计,sql,oracle,Sql,Oracle,Oracle SQL: 我有数据库中的销售数据,我正试图根据他们的地区,得出今年迄今为止每个销售人员的销售佣金总额。所有销售人员都受到这样的约束:CUSTNO不能等于C001、C002或C003。这里有一位售货员 SELECT sum(commission) AS Sales_Person_1 FROM salesdata WHERE state IN ('TX', 'CA', 'FL') AND CUSTNO NOT IN (

Oracle SQL
我有数据库中的销售数据,我正试图根据他们的地区,得出今年迄今为止每个销售人员的销售佣金总额。所有销售人员都受到这样的约束:CUSTNO不能等于
C001
C002
C003
。这里有一位售货员

SELECT sum(commission) AS Sales_Person_1
FROM salesdata
WHERE state IN ('TX',
                'CA',
                'FL')
  AND CUSTNO NOT IN ('C001',
                     'C002',
                     'C003')
  AND date >= 1/1/2017;
这给了我所有的佣金,基于这一行中的一个人,但我如何编写一个查询来包括所有其他销售人员,基于类似的地区标准

我希望它也能对相同的数据求和,但要基于“
GA
”、“
NY
”作为一行、
NH
”、“
WA
”作为一行,等等

理想情况下,我希望我的数据返回为:

Sales_Person_1 $500      
Sales_Person_2 $999   
Sales_Person_3 $888  

我尝试了按分组,但无法使用
WHERE
。我迷路了。任何帮助都将不胜感激

您的查询可能如下所示:

SELECT state_group,
SUM(commission) AS Total_Commission
FROM (
  SELECT
  CASE
    WHEN state IN ('TX', 'CA', 'FL') THEN 'Group 1'
    WHEN state IN ('GA', 'NY') THEN 'Group 2'
    WHEN state IN ('NH', 'WA') THEN 'Group 3'
    ELSE 'Undefined Group'
  END AS state_group,
  commission
  FROM salesdata
  WHERE CUSTNO NOT IN ('C001', 'C002', 'C003')
  AND date >= TO_DATE('1/1/2017', 'd/m/yyyy')
)
GROUP BY state_group
ORDER BY state_group;
子查询中的CASE语句允许您将每个状态值分配到“组”或“销售人员”中。如果要在最终结果中显示不同的值,可以重命名“组1”或“组2”。如果有更多组,还可以添加额外的WHEN行


外部查询将汇总这些组的佣金,并显示每个组的总额。

您的查询可能如下所示:

SELECT state_group,
SUM(commission) AS Total_Commission
FROM (
  SELECT
  CASE
    WHEN state IN ('TX', 'CA', 'FL') THEN 'Group 1'
    WHEN state IN ('GA', 'NY') THEN 'Group 2'
    WHEN state IN ('NH', 'WA') THEN 'Group 3'
    ELSE 'Undefined Group'
  END AS state_group,
  commission
  FROM salesdata
  WHERE CUSTNO NOT IN ('C001', 'C002', 'C003')
  AND date >= TO_DATE('1/1/2017', 'd/m/yyyy')
)
GROUP BY state_group
ORDER BY state_group;
子查询中的CASE语句允许您将每个状态值分配到“组”或“销售人员”中。如果要在最终结果中显示不同的值,可以重命名“组1”或“组2”。如果有更多组,还可以添加额外的WHEN行


外部查询将汇总这些组的佣金,并显示每个组的总额。

表结构是什么样的?表结构是什么样的?这适用于一个特定的销售人员,但我的问题是我有大约5个销售人员,他们涵盖不同的领域。销售人员1在德克萨斯州CA和佛罗里达州工作,就像您写的查询一样,而销售人员2在佐治亚州和纽约州工作。销售人员3在NH和WA工作。我知道我可以为每个查询编写一个查询,但我正在尝试使用一个组合查询,以允许我为每个查询输出一个总数。我不熟悉索引,但也许我可以用它?啊,我明白了。我已经更新了查询。如上图所示,您可以在单个查询中完成此操作。这个查询能提供你所需要的吗?这正是我想要的。在什么时候使用案例是完全有意义的。非常感谢你!这适用于一个特定的销售人员,但我的问题是我有大约5个销售人员,他们涵盖不同的领域。销售人员1在德克萨斯州CA和佛罗里达州工作,就像您写的查询一样,而销售人员2在佐治亚州和纽约州工作。销售人员3在NH和WA工作。我知道我可以为每个查询编写一个查询,但我正在尝试使用一个组合查询,以允许我为每个查询输出一个总数。我不熟悉索引,但也许我可以用它?啊,我明白了。我已经更新了查询。如上图所示,您可以在单个查询中完成此操作。这个查询能提供你所需要的吗?这正是我想要的。在什么时候使用案例是完全有意义的。非常感谢你!