2011-07-19 70 views
4

我正在使用oracle,它的group by子句看起來行爲與我預期的完全不同。Group By沒有正確分組

當使用此查詢:

SELECT stats.gds_id, 
    stats.stat_date, 
    SUM(stats.A_BOOKINGS_NBR) as "Bookings", 
    SUM(stats.RESPONSES_LESS_1_NBR) as "<1", 
    SUM(stats.RESPONSES_LESS_2_NBR) AS "<2", 
    SUM(STATS.RESPONSES_LESS_3_NBR) AS "<3", 
    SUM(stats.RESPONSES_LESS_4_NBR) AS "<4", 
    SUM(stats.RESPONSES_LESS_5_NBR) AS "<5", 
    SUM(stats.RESPONSES_LESS_6_NBR + stats.RESPONSES_LESS_7_NBR + stats.RESPONSES_GREATER_7_NBR) AS ">5", 
    SUM(stats.RESPONSES_LESS_6_NBR) AS "<6", 
    SUM(stats.RESPONSES_LESS_7_NBR) AS "<7", 
    SUM(stats.RESPONSES_GREATER_7_NBR) AS ">7", 
    SUM(stats.RESPONSES_LESS_1_NBR + stats.RESPONSES_LESS_2_NBR + stats.RESPONSES_LESS_3_NBR + stats.RESPONSES_LESS_4_NBR + stats.RESPONSES_LESS_5_NBR + stats.RESPONSES_LESS_6_NBR + stats.RESPONSES_LESS_7_NBR + stats.RESPONSES_GREATER_7_NBR) as "Total" 
FROM gwydb.statistics stats 
WHERE stats.stat_date >= '01-JUN-2011' 
GROUP BY stats.gds_id, stats.stat_date 

我得到的結果是這樣的:

GDS_ID STAT_DATE Bookings <1  <2 <3 <4 <5 >5 <6 <7 >7 Total  
02  12-JUN-11 0   1  0 0 0 0 0 0 0 0 1 
1A  01-JUN-11 15   831  52 6 2 2 4 1 1 2 897 
1A  01-JUN-11 15   758  59 8 1 1 5 2 1 2 832 
1A  01-JUN-11 10   593  40 2 2 1 2 1 0 1 640 
1A  01-JUN-11 12   678  40 10 5 2 3 1 0 2 738 
1A  01-JUN-11 24   612  56 6 1 3 4 0 0 4 682 
1A  01-JUN-11 23   552  37 7 1 1 2 0 1 1 600 
1A  01-JUN-11 35   1147 132 13 6 0 8 0 2 6 1306 
1A  01-JUN-11 91   2331 114 14 5 1 14 3 1 10 2479 

正如你所看到的,我有多個重複的STAT_DATE的每GDS_ID。爲什麼是這樣,我怎樣才能讓這兩個組合呢? I.E.根據STAT_DATE計算每個GDS_ID的值。

+2

誰downvoted,關心解釋? – Malfist

回答

7

可能是因爲STAT_DATE有一個時間組件,它在GROUP BY中被考慮到,但由於缺省格式掩碼而沒有顯示在結果中。要忽略的時間,這樣做:

SELECT stats.gds_id, 
    TRUNC(stats.stat_date) stat_date, 
    SUM(stats.A_BOOKINGS_NBR) as "Bookings", 
    SUM(stats.RESPONSES_LESS_1_NBR) as "<1", 
    SUM(stats.RESPONSES_LESS_2_NBR) AS "<2", 
    SUM(STATS.RESPONSES_LESS_3_NBR) AS "<3", 
    SUM(stats.RESPONSES_LESS_4_NBR) AS "<4", 
    SUM(stats.RESPONSES_LESS_5_NBR) AS "<5", 
    SUM(stats.RESPONSES_LESS_6_NBR + stats.RESPONSES_LESS_7_NBR + stats.RESPONSES_GREATER_7_NBR) AS ">5", 
    SUM(stats.RESPONSES_LESS_6_NBR) AS "<6", 
    SUM(stats.RESPONSES_LESS_7_NBR) AS "<7", 
    SUM(stats.RESPONSES_GREATER_7_NBR) AS ">7", 
    SUM(stats.RESPONSES_LESS_1_NBR + stats.RESPONSES_LESS_2_NBR + stats.RESPONSES_LESS_3_NBR + stats.RESPONSES_LESS_4_NBR + stats.RESPONSES_LESS_5_NBR + stats.RESPONSES_LESS_6_NBR + stats.RESPONSES_LESS_7_NBR + stats.RESPONSES_GREATER_7_NBR) as "Total" 
FROM gwydb.statistics stats 
WHERE stats.stat_date >= '01-JUN-2011' 
GROUP BY stats.gds_id, TRUNC(stats.stat_date) 
+0

太棒了,這個工程。謝謝。由於oracle將它報告爲DATE類型,並且只顯示了它不是DATETIME的日期,所以我錯誤地假定了它。我想我錯了。 – Malfist