0

私はサンプルの日付を入れていますが、私が求めているのと似たようなことをすることになっています. 2 つの列の値が 1 の場合、または 1 つの列のいずれかが 1 の場合、それらの結果だけを返すクエリを実行したいと考えています。ただし、3 つの列すべてを検索し、値が 1 であることがわかった 3 つの列のいずれかで、その結果を返す必要があります。誰でもこれで私を助けてくれませんか。前もって感謝します。

ID  Patient PatientName prio  prio2   prio3
-----------------------------------------------------    
1   101563  Robert Riley    1   1   1
2   101583  Cody Ayers  1   0   1
3   101825  Jason Lawler    0   0   1
4   101984  Dustin Lumis    1   0   0
5   102365  Stacy smith 0   0   1
6   102564  Frank Milon 1   1   0
7   102692  Thomas Kroning  1   0   1
8   102856  Andrew Philips  1   0   0
9   102915  Alice Davies    0   0   1
10  103785  Jon Durley  0   0   1
4

2 に答える 2

1

別のオプション: 列の値にゼロと 1 の両方が含まれている必要があります。

WHERE 0 IN (prio, prio, prio3) AND 1 IN (prio, prio2, prio3)
于 2012-07-09T04:42:36.790 に答える
1

私があなたの質問を理解した場合、「Prio*」フラグが 1 つまたは 2 つ設定されている患者が必要ですが、Prio フラグが設定されていない、または 3 つすべてが設定されている患者を除外する必要があります。フラグが [0,1] のドメインに制限されていると仮定すると (null 不可ビットなど)、次のようにしてうまくいくはずです。

SELECT ID, Patient, PatientName
FROM Patients
WHERE (0 + prio + prio2 + prio3 >= 1) AND (0 + prio + prio2 + prio3 <= 2)

編集パフォーマンスに関するメモ - どの SQL については言及していませんが、このようにビット フィールドを検索すると、ほぼ確実にテーブル スキャンが行われます。パフォーマンスを向上させるには、たとえば SQL Server で永続化された計算列を作成し、prio + prio2 + prio3これにインデックスを付けることができます。データの分布に応じて、インデックスには少なくとも選択性の可能性があります。

Edit2 Shawnt00 のコメントによると、数値型のいずれかにキャストせずにビット フィールドを追加することはできません。(ありがとう!)

于 2012-07-09T03:03:22.940 に答える