2015-10-05 20 views
-2
 
SELECT a.*, 
     SUM(s.amount) over(ORDER BY s.month rows unbounded preceding) AS a , 
     SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows unbounded preceding) AS b, 
     SUM(s.amount) over(PARTITION BY s.month) AS c_1, 
     SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN unbounded preceding AND unbounded following) AS c, 
     SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN 1 preceding AND unbounded following) AS d, 
     SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN 1 preceding AND 1 following) AS e, 
     SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN unbounded preceding AND 1 following) AS f, 
     SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows CURRENT ROW) AS g 
    FROM all_sales s, 
     (SELECT * 
     FROM all_sales) a 
WHERE s.rowid = a.rowid; 

/ - 上面的查詢給出了下面顯示的結果什麼是c_1和c列之間的區別。先進的SQL與開窗的克勞斯

 
    YEAR MONTH PRD_TYPE_ID EMP_ID AMOUNT A B C_1 C D E F G 
1 2006 1 1    21 1.00 1 1 10 10 10 3 3 1 
2 2006 1 1    21 2.00 3 3 10 10 10 6 6 2 
3 2005 1 2    21 3.00 6 6 10 10 9 9 10 3 
4 2005 1 2    22 4.00 10 10 10 10 7 7 10 4 
5 2006 2 1    21 5.00 15 5 11 11 11 11 11 5 
6 2005 2 1    21 6.00 21 11 11 11 11 11 11 6 
7 2005 3 1    21   21  7 7 7 7 7 
8 2006 3 2    21 7.00 28 7 7 7 7 7 7 7 
9 2005 4 1    21 8.00 36 8 17 17 17 17 17 8 
10 2006 4 2    21 9.00 45 17 17 17 17 17 17 9 
11 2006 5 2    21   45  10 10 10 10 10 
12 2005 5 1    21 10.00 55 10 10 10 10 10 10 10 
13 2006 6 1    21 11.00 66 11 23 23 23 23 23 11 
14 2005 6 1    21 12.00 78 23 23 23 23 23 23 12 
15 2005 7 2    21 13.00 91 13 27 27 27 27 27 13 
16 2006 7 1    21 14.00 105 27 27 27 27 27 27 14 
17 2005 8 2    21 15.00 120 15 31 31 31 31 31 15 
18 2006 8 1    21 16.00 136 31 31 31 31 31 31 16 
19 2005 9 2    21 17.00 153 17 35 35 35 35 35 17 
20 2006 9 1    21 18.00 171 35 35 35 35 35 35 18 
21 2005 10 2    21 19.00 190 19 39 39 39 39 39 19 
22 2006 10 1    21 20.00 210 39 39 39 39 39 39 20 
23 2006 11 1    21 21.00 231 21 43 43 43 43 43 21 
24 2005 11 1    21 22.00 253 43 43 43 43 43 43 22 
25 2006 12 2    21 23.00 276 23 47 47 47 47 47 23 
26 2005 12 1    21 24.00 300 47 47 47 47 47 47 24 
+0

,什麼是問題?列c和c_1的列爲 –

+0

的結果相同。當它給出不同的結果? –

回答

1

你有同樣的結果,因爲你的語句是preaty相同:

SUM(s.amount) over(PARTITION BY s.month) AS c_1, 
SUM(s.amount) over(PARTITION BY s.month ORDER BY s.month rows BETWEEN unbounded preceding AND unbounded following) AS c 

它的原因是條件BETWEEN unbounded preceding AND unbounded following因爲它涵蓋了分區的整個範圍。

從MSDN:

  • UNBOUNDED PRECEDING - 指定窗口開始在分區的第一行。 UNBOUNDED PRECEDING只能被指定爲窗口起點。
  • UNBOUNDED FOLLOWING - 指定窗口在分區的最後一行結束。 UNBOUNDED FOLLOWING只能被指定爲窗口終點。例如CURRENT ROW和UNBOUNDED FOLLOWING之間的範圍定義了一個以當前行開始並以分區的最後一行結束的窗口。

當他們一起等於PARTITION BY s.month