2016-10-20 3 views
-1

특정 계정에 대한 작업을 보유하는 테이블이 있으며 작업에는 번호가있는 일련의 작업이 주어지며 해당 SET 내에서 고유 한 순차적 번호가 제공됩니다. 우리는 어떻게 든 고유 번호 중 하나가 중복되어 이것이 일어 났을 수있는 더 많은 예제를 확인하고자하는 문제에 직면했습니다. 테이블은 작은 다음과 같습니다 : 여기에 내가 검색을 통해 발견 한 여러 가지를 시도했지만 내 특정 상황에 맞는처럼 보이는 아무것도 찾을 수 없습니다특정 조건을 기반으로하는 열에서 중복 값 찾기

Account | Action Set | Action No | Action Code 
--------|------------|-----------|------------ 
    001 |  1  |  1  | GEN 
    001 |  1  |  2  | PHO 
    001 |  1  |  3  | RAN 
    001 |  1  |  3  | GEN 
    002 |  1  |  1  | GEN 
    002 |  1  |  2  | PHO 
    002 |  1  |  3  | RAN 

.

주어진 계정 번호에 대해 한 액션 SET 내에서 동일한 액션 번호가 두 번 이상 사용되는 곳을 찾고 싶습니다. 또한 전체 행 수를 반환해야합니다. 개수가 몇 개인 지 계산하는 것이 아닙니다. 위의 예에서

, 나는이 결과, 동일한 계정, 동일한 작업 세트, 동일한 작업 번호 내가 지금까지 시도 한 내용을 게시 할 것

Account | Action Set | Action No | Action Code 
--------|------------|-----------|------------ 
    001 |  1  |  3  | RAN 
    001 |  1  |  3  | GEN 

하지만 정직의 범위를 보여야하는데 내가 지금까지 작성한 코드는 다음과 같습니다

SELECT 

TIA

마크

+1

질문을 편집하고 찾으려는 내용의 예를 제공해야합니다. 행이 기준과 일치하지 않는 것 같습니다. –

+1

그것은 꽤 좋은 출발입니다! – jarlh

+0

@ GordonLinoff - 이미 답변 해 주셨고 솔루션도 효과가 있었지만 동일한 문제가있는 다른 사용자에게 도움이 될 수 있도록 제안 사항을 원래 질문으로 업데이트했습니다. 감사. –

답변

0

당신의 설명을 바탕으로, 당신은 exists를 사용할 수 있습니다

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.account = t.account and 
        t2.actionset = t.actionset and 
        t2.actionno <> t.actionno 
      ); 

편집 :

은 위의 해당 작업 번호가 다른 가정합니다. 그렇지 않으면 사용할 수 있습니다

select t.* 
from t 
where (select count(*) 
     from t t2 
     where t2.account = t.account and 
      t2.actionset = t.actionset 
    ) >= 2; 
+0

답장을 보내 주셔서 감사합니다. 조치 번호는 다를 수 있지만 동일한 위치를 식별하려고 시도해야합니다. 귀하의 두 번째 쿼리 나를 위해 작동하지 않았다, 그냥 데이터베이스의 모든 행을 반환합니다. 그러나 추가로 –

+0

을 추가했는데, 너무 빨리 입력하면 WHERE 절이 추가되어 추가되었습니다. 응답을 편집했습니다. –

0

이 하나

Select account,actionset,actioncode,actionno 
from table 
where (account,actionset) 
IN 
(
Select account,actionset from table 
group by account,actionset 
having count(distinct actionno)>1 
) 
group by account,actionset,actioncode,actionno 
+0

답장을 보내 주셔서 감사합니다.하지만 where 절이 대괄호 (account, actionset)에있는 것을 좋아하지 않습니다. ','근처에서 잘못된 구문 오류가 발생합니다. –

+0

대괄호를 제거한 다음 @MarkJeffries를 확인하십시오. –

+0

대괄호를 제거하려고했지만, 그 문제를 해결하지 못했습니다. 오류가 발생합니다 : ','근처에 조건이 예상되는 컨텍스트에 지정된 부울 유형의 표현식입니다. –

0

테이블에서 중복 레코드를 얻기 위해 내 솔루션을 찾아주세요보십시오.

SELECT [ActionSet],ActionCode,[ActionNo] 
FROM 
(
    SELECT *,ROW_NUMBER()OVER(PARTITION by [ActionSet],[ActionNo] ORDER BY 
    [ActionNo]) as rnk FROM [dbo].[ActionAccount] 
) t where t.rnk>1 

감사합니다.