-1

私のクエリは以下のようなものです.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'

これは正しい方法ですか?

4

4 に答える 4

1

単純にレコードをカウントする場合は、SQL Server が提供する COUNT 関数を使用することをお勧めします。以下の使用を検討してください。

SELECT COUNT(*) FROM [Table] WHERE TYPE = 1
                              AND (SUBTYPE = 1
                               OR  SUBTYPE = 2
                               OR  SUBTYPE = 3)

SQL エンジンへの不要な呼び出しにつながる可能性があるため、'IN' の使用は避けることをお勧めします。

于 2012-07-16T17:01:01.207 に答える
1

私が見る限り、基準を満たすワークステーションの数を取得しようとしているだけなので:

SELECT COUNT(*) AS Workstations FROM MyWorkStationTable WHERE Type = 1 AND SubType IN (1, 2, 3)

また、IN 句は本質的にすでに OR です。これは有効な構文ではなく、記述する必要もありません。

于 2012-07-16T16:31:02.797 に答える
0
SELECT COUNT(*) [Workstations] FROM [YourTable] t WHERE t.Type = 1 AND t.SubType IN (1, 2, 3) 
于 2012-07-16T16:32:14.033 に答える
0

述語を避け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 回反復が行われます!!!

于 2012-07-16T16:36:20.410 に答える