0

次のロジックを適用する最良の方法を見つけようとしています。私たちのビジネス ロジックでは、一連の行を var テーブルに挿入してから、すべての個別のレコードを選択しますが、同じ ID を持つすべてのレコードに一致する場合にのみ条件を正に設定する必要があります [つまり、基本的にビットごとの AND]

うまくいけば、私の例はそれをよりよく説明しています。

DECLARE @sometable TABLE (
record_id INT NOT NULL,
some_condition BIT NOT NULL)

そのテーブルのレコードが一致します

record_id some_condition
1         1
1         0
2         0
3         0

上記の場合、目的の出力は

record_id some_condition
1         0
2         0
3         0

今までのやり方はこんな感じ

SELECT DISTINCT record_id  CAST(MIN(CAST(some_condition INT)) AS some_condition
FROM @sometable
GROUP BY record_id  

これを行うより良い方法はありますか?MIN は数値型のみを取るため、変数をキャストする必要があります。

4

2 に答える 2

1

まず、 を省略することができDISTINCTますGROUP BYCASTまた、 0 を追加するだけで、最も内側を避けることができます。

SELECT record_id,  CAST(MIN(some_condition+0) as BIT) AS some_condition
FROM @sometable
GROUP BY record_id

最後に、完了したら BIT に再キャストする必要は本当にありますか? クエリ結果の使用方法によっては、必要ない場合があります。

于 2012-11-21T21:20:27.397 に答える
1

caseステートメントを使用するのはどうですか?

select record_id,
min(case when some_condition=0 then 0 else 1 end) as minCond
from sometable
group by 
record_id
于 2012-11-21T21:19:41.650 に答える