2017-11-02 14 views
0

내부 조인을 사용하여 두 테이블에서 일치하는 행을 얻으려는 경우 모두 일치하면 01으로 설정하십시오. 마지막으로 변수 @duplicate_counts1 또는 0을 설정하고 싶습니다.내부 조인을 사용하여 case 문 t-sql을 사용하여 변수 선택 일치하는 행을 설정하십시오.

샘플 데이터 ClaimsTable은 (모두, ClaimsTable#tempTable 동일한 열이)

Time    Terminal_ID Count 
------------------------------------ 
2017-10-19 06:03:00  1   5 
2017-10-19 06:04:00  1   2 
2017-10-19 06:05:00  1   2 
2017-10-19 06:06:00  1   2 
2017-10-19 06:03:00  9   2 
2017-10-19 06:04:00  9   3 
2017-10-19 06:05:00  9   2 
2017-10-19 06:06:00  9   3 
2017-10-19 06:06:00  9   3 

#tempTable ,

Time    Terminal_ID Count 
------------------------------------ 
2017-10-19 06:03:00  1   5 
2017-10-19 06:04:00  1   2 
2017-10-19 06:05:00  1   2 
2017-10-19 06:06:00  1   2 
2017-10-19 06:03:00  9   2 
2017-10-19 06:04:00  9   3 
2017-10-19 06:05:00  9   2 
2017-10-19 06:06:00  9   3 

지금, 나는 innerjoin를 사용하여 두 테이블의 일치하는 행을 확인하시기 바랍니다. 일치하는 행이있는 경우 변수 @duplicate_counts0으로 설정하고 싶지 않다면 @duplicate_counts1으로 설정하고 싶습니다. 이 경우 ClaimsTables의 마지막 레코드가 중복됩니다.

내가하고있는 일은 중복이 없는지 확인하는 것입니다. 나는이 같은 CASE 문을 시도

declare @duplicate_counts int 
    set @duplicate_counts =(select 
    CASE WHEN 
    (
     select count(*) 
     from ClaimsTable 
     inner join #temptable 
      on #temptable.[time] = ClaimsTable.[time] 
      and #temptable.terminal_id = ClaimsTable. terminal_id 
    ) 
    THEN 0 
    ELSE 1 
END 
select @duplicate_counts 

이, 문은 나에게 오류 준 :

An expression of non-boolean type specified in a context where a condition is expected, near 'then'.

이 후,이 같은 if 문을 다하겠습니다을

if @duplicate_counts = 1 
      begin 
      --insert duplicates into bin table 
      insert into BinTable 
      ... 

이렇게하면 ClaimsTable의 마지막 레코드가에 삽입됩니다..

case 문에서 1과 일치하는 경우 어떻게 0으로 설정할 수 있습니까?

+0

내가 혼란 스러워요합니다. 카운트 또는 행 단위 플래그를 원하십니까? 샘플 데이터와 원하는 결과가 도움이 될 것입니다. –

+0

@ GordonLinoff 일치하는 값이 있으면 두 테이블을 검사합니다. 따라서 행 단위 플래그입니다. 내가 원하는 샘플 데이터와 출력을 게시 할 것입니다! –

+0

오류 메시지가 꽤 분명 나는 생각 ... 귀하의 SELECT COUNT (*) 문이 true/false가 아니라 숫자를 반환합니다. 당신이 정말로하고 싶은게 뭐지? – pmbAustin

답변

1
declare @duplicate_counts int 
IF 
    (
     select count(*) 
     from ClaimsTable 
     inner join #temptable 
      on #temptable.[time] = ClaimsTable.[time] 
      and #temptable.terminal_id = ClaimsTable. terminal_id 
    ) = (select count(*) from #temptable) 
    set @duplicate_counts = 0 
ELSE 
    set @duplicate_counts = 1 

select @duplicate_counts 
+0

'(select count (*) FROM #temptable) 뒤에 괄호가 없습니다.' –

0

여기에 어떤 일이 일어나는지 확실하지 않습니다. 나는 단순히 수를 얻을 후 별도로 중복을 삽입하지만,이 그것을 당신이 찾고있는 방법 할 것 같습니다

declare @duplicate_counts int 
set @duplicate_counts = (
SELECT SELECT COUNT(0) - SUM(CASE WHEN #temptable.terminal_id IS NULL THEN 1 ELSE 0 END) 
FROM ClaimsTable LEFT OUTER JOIN #temptable 
ON #temptable.[time] = ClaimsTable.[time] 
AND ClaimsTable.terminal_id = #temptable.terminal_id 
) 
select @duplicate_counts