2010-01-19 5 views
1

Access 데이터베이스에서 가져온 MS SQL 2005에서 대형 테이블 (60 열, 150 만 레코드)의 비정규 화 된 데이터가 있습니다. 이 데이터를 정규화하여 데이터 모델에 삽입해야한다는 과제가있었습니다.그룹화 및 비 구분 열 및 데이터 정규화

"customer_number"와 같은 그룹화를 사용하는 쿼리를 만들고 각 customer_number에 대해 뚜렷하지 않은 열만 포함하는 결과 집합을 반환하고 싶습니다. 나는 그것이 가능한지조차 모른다. 그러나 그것이 있었다면 큰 도움이 될 것이다.

편집 : 내 표는 3 열 (cust_num, cust_name_cust_address) 및 (5 개) 기록이있는 경우 cust_address 그 그룹에 대해 서로 다른 값을 가지고 있기 때문에 내 원하는 쿼리

|cust_num|cust_name|cust_address 
|01  |abc  |12 1st street 
|02  |cbs  |1 Aroundthe Way 
|01  |abc  |MLK BLVD 
|03  |DMC  |Hollis Queens 
|02  |cbs  |1 Aroundthe Way 

결과는 cust_num과 CUST_NAME의 데이터를해야한다 of cust_num. cust_num에는 많은 주소가 있지만 단 하나의 cust_name 만 있습니다.

누군가 나를 올바른 방향으로 안내 할 수 있습니까?

짐이

+0

몇 가지 샘플 데이터와 결과 레코드 세트를 게시 하시겠습니까? – Quassnoi

답변

0

아니요, 수행 할 수 없습니다.

2
WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, … ORDER BY id) AS rn 
     FROM mytable 
     ) 
SELECT * 
FROM q 
WHERE rn = 2 

이것은 PARTITION BY 절에 나열된 모든 열에서 중복이 행만 선택합니다 (있는 경우 사실을, 그 첫 번째 복제를 선택합니다).

+0

이것은 내가 요청한 것이지만 내 문제를 해결하지 못합니다. 나는 원래의 견해를 편집 할 것이다. 나는 고객 번호별로 내 테이블을 그룹화하고 그룹화 된 고객 번호에 대해 중복 된 값을 다시 모든 컬럼으로 가져오고 싶습니다. 예를 들어, customer_name이 very_large_table에서 동일한 경우, customer_number와 customer_name만으로 리턴 세트를 얻을 수 있습니다. 그러나 customer_address가 각 고객마다 같으면 3 개의 컬럼을 모두 돌려 받게됩니다. – jim