2012-12-10 74 views
0

我想獲得以下範圍的計數和總和(10-20,21-30,31-40)。我如何修改此查詢來獲取?各種範圍的計數和總和

select count (t.aaa), sum (t.bbb) 
from xxx t 
where t.qqq IN ('3') 
and t.www like 'A' 
and t.eee >= TO_DATE('2008/03/20','YYYY/MM/DD') 
and t.eee <= TO_DATE('2009/03/21','YYYY/MM/DD') 
and t.ttt >= 10 and t.ttt <= 20 

輸出應該是這個樣子:

╔════════╦══════════════╦════════════╗ 
║ TRANGE ║ COUNT(t.aaa) ║ SUM(t.bbb) ║ 
╠════════╬══════════════╬════════════╣ 
║ 10-20 ║   340 ║ 4981620000 ║ 
║ 21-30 ║   239 ║ 3999425000 ║ 
║ 31-40 ║   199 ║ 4076525000 ║ 
╚════════╩══════════════╩════════════╝ 
+2

請發表您的表XXX的描述與樣本數據的樣本數據的幾行和您的預期輸出。這會幫助我們更好地理解你的問題。 –

+0

[樣本](http://www.mediafire.com/?j1759febib926b2) –

回答

2

這聽起來像你可能會t.www和每個範圍要組。一個案例可以將每個數字轉換爲一個範圍值,然後可以在該組中使用。

SELECT CASE 
    WHEN t.ttt BETWEEN 10 AND 20 THEN '10-20' 
    WHEN t.ttt BETWEEN 21 AND 30 THEN '21-30' 
    ELSE '31-40' END TRange 
    , count(t.aaa), sum(t.bbb) 
FROM xxx t 
WHERE t.qqq IN ('3') 
AND t.www IN ('A','B','C','D') 
AND t.eee >= TO_DATE('2008/03/20','YYYY/MM/DD') 
AND t.eee <= TO_DATE('2009/03/21','YYYY/MM/DD') 
AND t.ttt BETWEEN 10 AND 40 
GROUP BY CASE 
    WHEN t.ttt BETWEEN 10 AND 20 THEN '10-20' 
    WHEN t.ttt BETWEEN 21 AND 30 THEN '21-30' 
    ELSE '31-40' END; 

SQLFiddle.

+0

第一:問題是真實的.-----第二:thx求助。結果很好。但有一些東西。我想按範圍分組。所以我會有2列(count t.aaa和t.bbb)和3行(10-20,21-30和31-40)。 6個數據單元,僅此而已。 –

+0

結果是[This](http://www.mediafire.com/?2lbd70fzxvdh7i8)。而我之後的是[This](http://www.mediafire.com/?j1759febib926b2)。 –

+0

然後只需從組中刪除t.www。我編輯了答案以反映你想要的內容。 –