나는이 스크립트를 한동안 사용해 왔으며 막 다른 골목에 다다 랐다. 스크립트는 작동하지만 불행하게도 중복을 생성합니다. 내 스크립트는 state_issue_teacher_id 키의 데이터베이스에서 두 개의 다른 테이블을 조인 한 다음 출력을 생성합니다. 두 테이블을 모두 확인하고 행 수는 동일하며 조인은 레코드와 완벽하게 일치해야하지만 분명히 내 키 또는 테이블에 가입하는 방식에 문제가있어 출력이 부분적으로 올바르지 않게 되돌아옵니다. 또한 고유 한 키를 만들고 테이블을 조인하지만 여전히 잘못된 결과를 생성하는 특성을 연결하려고했습니다.데이터베이스에서 테이블에 중복 행을 제거하는 방법은 무엇입니까?
SELECT
LTRIM(RTRIM(rt.year_time)) AS 'year_time' ,
LTRIM(RTRIM(rt.state_issue_teacher_id)) AS state_issue_teacher_id ,
LTRIM(RTRIM(rt.district_code)) AS district_code ,
rt.district_name ,
rt.school_name ,
LTRIM(RTRIM(rt.assignment_code)) AS assignment_code ,
rt.assignment_desc ,
LTRIM(RTRIM(rt.position_code)) AS position_code ,
rt.position_desc ,
LTRIM(RTRIM(rt.last_name)) AS last_name ,
LTRIM(RTRIM(rt.first_name)) AS first_name ,
LTRIM(RTRIM(rt.total_salary)) AS total_salary ,
rt.assign_fte ,
LTRIM(RTRIM(rt.school_code)) AS school_code ,
rt.fte
FROM staging.dbo.rt AS rt
LEFT JOIN (SELECT LTRIM(RTRIM(dti.year)) AS year ,
LTRIM(RTRIM(dt.teacher_id)) AS teacher_id ,
LTRIM(RTRIM(db.district_code)) AS district_code ,
db.district_name ,
LTRIM(RTRIM(dt.last_name)) AS last_name ,
LTRIM(RTRIM(dt.first_name)) AS first_name ,
LTRIM(RTRIM(da.assignment_code)) AS assignment_code ,
LTRIM(RTRIM(dp.position_code)) AS position_code ,
dre.race_ethnicity_code ,
LTRIM(RTRIM(SUBSTRING(db.school_code,10,4))) AS school_code ,
da.assignment_desc ,
dp.position_desc ,
fs.total_fte
FROM mart.dbo.fact_s AS fs
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_building
AS db ON fs.building_key = db.building_key
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_teacher
AS dt ON fs.teacher_key = dt.teacher_key
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_assignment
AS da ON fs.assignment_key = da.assignment_key
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_race_ethnicity
AS dre ON dt.race_ethnicity_key = dre.race_ethnicity_key
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_gender
AS dg ON dt.gender_key = dg.gender_key
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_time
AS dti ON fs.time_key = dti.time_key
LEFT OUTER JOIN mart.dbo.fact_s.dbo.dim_position
AS dp ON fs.position_key = dp.position_key
WHERE dti.year = '2012'
) raw ON rt.state_issue_teacher_id = raw.teacher_id
AND rt.year_time = raw.year
AND rt.last_name = raw.last_name
AND rt.first_name = raw.first_name
AND rt.district_code = raw.district_code
AND rt.position_code = raw.position_code
AND rt.school_code = RAW.school_code
AND rt.assignment_code = raw.assignment_code
WHERE rt.year_time = '2012'
ORDER BY rt.last_name, rt.first_name
내가 갖는 출력은 다음과 같습니다 :
결합 된 교사 배정에 대한 FTE이 같은이 그 1. 그러나 교사를 추가해야 다음
내 스크립트입니다 여러 개의 부분 할당이있는 assignment_code/desc가 중복을 생성합니다. 예 : Jane Doe는 2 회가 아닌 총 fte가 4 회 나타 났으며 올바른 총합은 1.0입니다. 출력은 다음과 같이 읽어야합니다.
그래서 당신은 같은 것이, RT AS staging.dbo.rt로부터 "관심의 모든 열을"SELECT FS AS mart.dbo.fact_s하지 않으 WHERE rt.state_issue_teacher_id = fs.teacher_id 및 rt.year_time의 =의 FS .year 및 rt.year_time = '2012'; – Clark
두 테이블의 기본 키는 무엇입니까? 동일한 행 수로 인해 결과 조인의 행 수가 동일하지는 않습니다. – Andreas
Pk가 state_issue_teacher_id – Tone