2014-02-17 2 views
0

I가 이러한 열을 포함하는 테이블 : 나는 모든 Nameplate, Model 조합을 찾을 필요가SQL - 하나 개의 컬럼에 중복 값이있는 행을 찾기

Nameplate Model Segment 
Acura  ILX Small Lux Car 
Audi  Q5  Compact Lux Car 
Audi  Q5  Mid Lux Car 
Audi  SQ5 Compact Lux Car 

: 같은

Nameplate 
Model 
Segment 

샘플 테이블의 모양을 복수 Segments. 위의 표에서

, 나는 그것을 반환해야합니다
Audi  Q5  Compact Lux Car 
Audi  Q5  Mid Lux Car 

나는 다음과 같은 작업 것이라고 생각 :

SELECT DISTINCT 
    [Nameplate], [Model], [Segment] 
FROM 
    dbo.[Weighted Extract] 
GROUP BY 
    [Nameplate], [Model], [Segment] 
HAVING 
    COUNT([Segment]) > 1; 

위의 코드는 여러 Nameplate, ModelSegment 행이 조합을 반환합니다. 이것은 내가 만드는 것보다 쉬워야하지만 막혔습니다.

답변

-1

이 시도 :

SELECT [Nameplate], [Model] 
FROM dbo.[Weighted Extract] 
GROUP BY [Nameplate], [Model] 
HAVING COUNT(distinct [Segment]) > 1; 
+0

'Segment' 열을 원하는대로 반환하지 않습니다. –

+0

그게 다야! 세그먼트를 SELECT 문에 추가하려고했는데 오류가 발생했습니다. 빠른 답변 감사합니다. – user3319605

+0

@ Martin - 당신 말이 맞습니다. 그러나 Kaidjin의 코드는 적어도 중복 된 부분을 보여줍니다. 세그먼트를 표시하는 것은 좋을 것이지만,이 시점에서 나의 필요에 비판적이지는 않았습니다. – user3319605

4

당신은 EXISTS를 사용할 수 있습니다

SELECT [Nameplate], [Model], [Segment] 
FROM dbo.[Weighted_Extract] we1 
WHERE EXISTS 
(
    SELECT 1 FROM dbo.[Weighted_Extract] we2 
    WHERE we1.Nameplate = we2.Nameplate 
    AND we1.Model = we2.Model 
    AND we1.Segment <> we2.Segment 
); 

Demo

1

이보십시오,이 2005 + SQLSERVER에서 작동합니다 :

;WITH X AS 
(
    SELECT [Nameplate], [Model], [Segment], 
     count(*) over (partition by [Nameplate], [Model]) cnt 
    FROM dbo.[Weighted Extract] 
) 
SELECT [Nameplate], 
     [Model], 
     [Segment] 
FROM X 
WHERE cnt > 1 
관련 문제