内部結合を使用して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_counts
を0
に設定し、そうでない場合は@duplicate_counts
を1
に設定します。この場合、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に設定できますか?
私は混乱しています。あなたはカウントまたは行ごとのフラグをしたいですか?サンプルデータと望ましい結果が役立ちます。 –
@ GordonLinoff一致する値があれば、2つのテーブルをチェックしています。したがって、行単位のフラグです。サンプルデータと投稿したいデータを投稿します! –
エラーメッセージはかなり明らかです...ケースのSELECT COUNT(*)文は、真/偽ではなく数値を返します。あなたは本当に何をしたいですか? – pmbAustin