2017-09-27 62 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