2013-05-30 25 views
0

我有一個簡單的查詢,我希望獲得一些特定的結果,但不確定正確的解決方法。我使用的是SQL Server數據庫和我的查詢如下:在sql中重複屬性值

SELECT dt.year , 
     db.dist_code , 
     db.dist_name , 
     db.s_code , 
     db.s_name , 
     fl.zip , 
     fl.num_births , 

     total_enrollment 
FROM dbo.fact_enrollment_school AS fs 
     INNER JOIN dbo.dim_building AS db ON fs.building_key = db.building_key 
     INNER JOIN dbo.dim_time AS dt ON fs.time_key = dt.time_key 
     LEFT OUTER JOIN dbo.fact_live_birth AS fl ON dt.time_key = fl.time_key 
               AND db.building_key = fl.building_key 

GROUP BY dt.year , 
     db.dist_code , 
     db.dist_name , 
     db.school_code , 
     db.school_name , 
     fl.zip , 
     total_enrollment , 
     fl.num_births 

enter image description here

我需要的是輸出num_births總額爲每district_code是一樣的。

所需的輸出:

enter image description here

回答

2

我想你可以通過窗口函數實現這一點:

SELECT dt.year , 
    db.dist_code , 
    db.dist_name , 
    db.s_code , 
    db.s_name , 
    fl.zip , 
    sum(fl.num_births) over (partition by dt.year, db.dist_code), 

    total_enrollment 
FROM dbo.fact_enrollment_school AS fs 
    INNER JOIN dbo.dim_building AS db ON fs.building_key = db.building_key 
    INNER JOIN dbo.dim_time AS dt ON fs.time_key = dt.time_key 
    LEFT OUTER JOIN dbo.fact_live_birth AS fl ON dt.time_key = fl.time_key 
              AND db.building_key = fl.building_key; 
+0

上述接近什麼即時尋找,但即時通訊與多年,每年工作對於num_births具有不同的最大數量(例如:2007 num_births = 56,2008 num_births = 70)。當總結總數時,它總結了5年給我一個不正確的結果。 – Tone

+0

編輯答案..是否爲你工作?你可以添加多個分區的子句的窗口函數,這可能會導致類似於在正常的聚合查詢中會有什麼樣的組合。 – user2407394

+0

您編輯的版本具有正確的邏輯,但我的num_births仍在求和中,這會產生不正確的結果。我對over條款不是很熟悉,但是你可以在沒有總和的情況下使用over? num_births的結果不應該是一個總和。 – Tone