-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

由于您只是想计算符合我所见标准的工作站数量:

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

此外,IN 子句本质上已经是 OR。它既不是有效的语法,也没有必要说明它。

于 2012-07-16T16:31:02.797 回答
1

如果您只是对记录进行计数,最好的办法是使用 SQL Server 提供的 COUNT 函数。考虑使用以下内容:

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

最好避免使用“IN”,因为它会导致对 SQL 引擎的不必要调用。

于 2012-07-16T17:01:01.207 回答
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使用谓词,而是使用连接,因为它不必要地迭代,尽管事实上只有一个/两个匹配。我将用一个例子来解释它。

假设我有两个列表对象。

List 1      List 2
  1           12
  2            7
  3            8
  4           98
  5            9
  6           10
  7            6

使用IN,它将搜索List-2中的每个List-1项目,这意味着迭代将发生49 次

于 2012-07-16T16:36:20.410 回答