2017-09-27 25 views
0

的Oracle SQL
我有一个DB销售数据,我想拉佣金总数,每个销售人员,为年初至今的销售额,根据他们的领土。所有销售人员都受到CUSTNO不能等于C001,C002C003的限制。这里有1名销售人员。的Oracle SQL:结合WHERE不同的标准语句显示合计不等的

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 

我试图GROUP BY,但我不能用WHERE。我迷路了。任何帮助将非常感激。

+0

什么是表结构? – alejandrogiron

回答

2

您的查询看起来是这样的:

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行。

外部查询将总结这些组的佣金并显示每个组的总数。

+0

这适用于1个特定的销售人员,但我的问题是我有大约5个销售人员,他们涉及不同的领域。 销售人员1在TX CA和FL工作,就像您写的查询一样,然而Sales Person 2在GA和NY工作。销售人员3在NH和WA工作。我知道我可以为每个查询写一个查询,但我试图让一个组合查询允许我输出每个查询的总数。我不熟悉索引,但也许我可以使用它? – Delbudge

+0

啊,我明白了。我更新了查询。如上所示,您可以在单个查询中执行此操作。这个查询是否给你你需要的东西? – bbrumm

+0

这正是我正在寻找的。使用CASE和WHEN是完全合理的。非常感谢你! – Delbudge