私のクエリは以下のようなものです.Type = 1およびsubtype = 1,3または2の場合に値を選択したい.
select sum(case when Type = 1 and SubType in (1, 3 or 2) then 1 else 0 end) as 'WorkStations'
これは正しい方法ですか?
私のクエリは以下のようなものです.Type = 1およびsubtype = 1,3または2の場合に値を選択したい.
select sum(case when Type = 1 and SubType in (1, 3 or 2) then 1 else 0 end) as 'WorkStations'
これは正しい方法ですか?
単純にレコードをカウントする場合は、SQL Server が提供する COUNT 関数を使用することをお勧めします。以下の使用を検討してください。
SELECT COUNT(*) FROM [Table] WHERE TYPE = 1
AND (SUBTYPE = 1
OR SUBTYPE = 2
OR SUBTYPE = 3)
SQL エンジンへの不要な呼び出しにつながる可能性があるため、'IN' の使用は避けることをお勧めします。
私が見る限り、基準を満たすワークステーションの数を取得しようとしているだけなので:
SELECT COUNT(*) AS Workstations FROM MyWorkStationTable WHERE Type = 1 AND SubType IN (1, 2, 3)
また、IN 句は本質的にすでに OR です。これは有効な構文ではなく、記述する必要もありません。
SELECT COUNT(*) [Workstations] FROM [YourTable] t WHERE t.Type = 1 AND t.SubType IN (1, 2, 3)
述語を避けIN
、代わりに結合を使用してください。1 つまたは 2 つの一致しかないという事実にもかかわらず、不必要に反復するためです。例を挙げて説明します。
2 つのリスト オブジェクトがあるとします。
List 1 List 2
1 12
2 7
3 8
4 98
5 9
6 10
7 6
を使用すると、 List-2の各List-1項目IN
が検索されます。つまり、49 回反復が行われます!!!