2017-11-02 3 views
0

内部結合を使用して2つのテーブルから一致する行を取得しようとしていて、それらがすべて一致する場合は0に設定し、それ以外の場合は1に設定します。最後に、その変数に1または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の最後のレコードがに挿入されます。

ケースステートメントのelse 1と一致する場合、どうすれば0に設定できますか?

+0

私は混乱しています。あなたはカウントまたは行ごとのフラグをしたいですか?サンプルデータと望ましい結果が役立ちます。 –

+0

@ GordonLinoff一致する値があれば、2つのテーブルをチェックしています。したがって、行単位のフラグです。サンプルデータと投稿したいデータを投稿します! –

+0

エラーメッセージはかなり明らかです...ケースのSELECT COUNT(*)文は、真/偽ではなく数値を返します。あなたは本当に何をしたいですか? – 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 
関連する問題