1

ソース ファイルのどの行が SQL サーバー データベースで実行されるかを保存しています。私のクエリでは、2 つのファイルの実行が重複しているかどうかを判断したいと考えています。例えば

ライン Run1 Run2
1×
2xx
3
4×

Run1 は 1 行目と 2 行目を実行し、run2 は 2 行目と 4 行目を実行しました。 (run1 & ! run2) を実行すると、1 行目が Run1 でのみ実行されたことがわかります。

実行をビット マスク (varbinary) として保存する場合、SQL クエリで実行を比較するにはどうすればよいですか?

create table runs columns filename varchar, runCoverage varbinary;
select filename, andNot(run, 1) from runs group by filename

これは、実行 (の選択) を他の実行ビット フィールドと比較します。理想的には、レコードのグループのビットフィールド (1 つのコンポーネントからのライン カバレッジ データ) の OR をとり、別のレコードのグループと AND NOT をとりたいと考えています。結果の 1 ビットを数えることができます。これは、テストの 1 つのグループでカバーされているが、別のグループではカバーされていない行の数です...

4

1 に答える 1

0

行数があまり多くない場合は、単純に varbinary を bigint にキャストしてビットごとの比較を行い、1 行目を実行したすべてのファイルを取得できます。

where (cast(runCoverage as bigint) & 1) > 0

または、1 行目以外の行を実行したすべてのファイル

where (cast(runCoverage as bigint) & ~1) > 0

行数が多い場合は、substr を使用してヘルパー関数を作成し、適切なビットを取得できます。繰り返しになりますが、おそらく私は質問を完全に誤解しています。

于 2012-06-02T07:50:27.010 に答える