2016-09-09 4 views
1

내 고객 정보를 얻기 위해 서로 조인 된 3 개의 테이블이 있습니다. 내 고객 중 일부는 다중 인종이며 중복 행이있는 테이블을 만듭니다. 새로운 가치를 식별하고 ID가 중복되면 경주에서 Multiracial을 가치로 준다고 말할 수 있을지 궁금합니다.
나는이 있습니다새 값을 식별하는 방법

ID  Name  Age Race 
4000 Duc  25 Philipino 
4000 Duc  25 Chinese 
4001 Daniel 36 African American 
4002 Nicole 20 White 
4002 Nicole 20 Middle East 

내가 (MS SQL과 MySQL을 작동합니다) 난 정말 어떤 도움을 주셔서 감사합니다

ID  Name  Age Race 
4000 Duc  25  Multiracial 
4001 Daniel 36  African American 
4002 Nicole 20  Multiracial 

+1

이렇게 msft sql server입니까? 당신은 아래의 cte 대답을 가지고 있습니다 – Drew

답변

1

당신이 할 수 있습니다 갖고 싶어 :

SELECT ID,Name,Age, CASE WHEN COUNT(Race)>1 THEN 'Mulitiracial' ELSE MAX(Race) END Race 
FROM Src 
GROUP BY ID,Name,Age 

데이터를 테스트하려면 (MS SQL에서만 CTE) 다음을 사용했습니다.

WITH Src AS 
(
    SELECT * FROM (VALUES 
    (4000, 'Duc ', 25, 'Philipino'  ), 
    (4000, 'Duc ', 25, 'Chinese'   ), 
    (4001, 'Daniel', 36, 'African American'), 
    (4002, 'Nicole', 20, 'White   '), 
    (4002, 'Nicole', 20, 'Middle East  ') 
    )T (ID,Name,Age,Race) 
) 
SELECT ID,Name,Age, CASE WHEN COUNT(Race)>1 THEN 'Mulitiracial' ELSE MAX(Race) END Race 
FROM Src 
GROUP BY ID,Name,Age 
+0

정말 고마워요. Pawel 완벽하게 작동합니다. –

0
;WITH CTE 
AS 
(SELECT ID,NAME,AGE,RACE,COUNT(*) OVER (PARTITION BY ID,NAME,AGE ORDER BY (SELECT NULL)) AS CNT 
FROM 
#TEMP 
) 
SELECT ID,NAME,AGE,CASE WHEN CNT>1 THEN 'MULTIRACILA' ELSE RACE END 
FROM CTE 
GROUP BY 
ID,NAME,AGE,CASE WHEN CNT>1 THEN 'MULTIRACILA' ELSE RACE END 
+0

정말 당신의 시간 TheGameiswar 주셔서 감사합니다! –

+0

Pawel 솔루션은 훨씬 더 우아합니다. 당신은 그 점을 받아 들여야합니다. 서두른 점이 있습니다. – TheGameiswar

관련 문제