次のデータ構造があります。
P_ID EVSSMIN EVSSMAX TDMIN TDMAX WARD SYRINGE_ID COMBINE_WITH CUSTOM_CONCENTRATION
1003 0 20 125 250 2ZKG 1021038
44444444 5
1003 20 60 125 250 2ZKG 1021037
44444444 5
通常、結果には次のクエリを使用しています。
[クエリ 1]
SELECT *
FROM [definities]
WHERE 160 BETWEEN [TDMIN] AND [TDMAX] AND [WARD] = '2ZKG' AND [P_ID]=` 1003;
テーブルの最後の列には、0 より大きい値を含めることができます。それより大きい値は 5 です。
通常、上記のクエリの代わりに以下のクエリを実行します。
[クエリ 2]
SELECT * FROM [definities]
WHERE 160 BETWEEN [TDMIN] AND [TDMAX]
AND CAST(160 as decimal) / [CUSTOM_CONCENTRATION]) BETWEEN EVSSMIN AND EVSMAX
AND [WARD] = '2ZKG' -- AND [P_ID]= 1003;
ご覧のとおり、クエリは値 160 を [CUSTOM_CONCENTRATION]) 値で割って計算しています。EVVSMIN と EVSSMAX の間で一致し、値 160 は TDMIN と TDMAX の間で一致します。通常、[CUSTOM_CONCENTRATION] 列に 0 より大きい値が含まれている場合、クエリ 2 は適切に機能します。
問題は、[CUSTOM_CONCENTRATION] 列に 0 より大きい値が含まれていない場合、クエリでレコードを返すことができないことです。これは、クエリを変更するか、[CUSTOM_CONCENTRATION] 値に基づいて何かを変更する必要があることを意味します。これは C# コード内で解決できますが、if ステートメントで反復してチェックする必要がある複数のレコードではなく、値に基づいて正確なレコードを返すクエリとしてこれを行うことができます。