2013-05-30 4 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). 총 num_births를 합산하면 5 년 동안의 합계가 합산되어 잘못된 결과가 나옵니다. – Tone

+0

답변을 편집 했습니까? 그것이 당신을 위해 일합니까 ?? u는 여러 개의 partition by 절을 창 함수에 추가 할 수 있습니다. 이는 일반적인 집계 쿼리에서 그룹과 유사하게 나타날 수 있습니다. !! – user2407394

+0

편집 한 버전의 논리가 올바르지 만 잘못된 결과를 생성하는 num_births가 여전히 합산됩니다. 나는 over 절에 익숙하지 않지만 합계없이 끝낼 수 있습니까? num_births에 대한 결과는 합계가 아니어야합니다. – Tone