我的查询如下所示。如果 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'
这是正确的方法吗?
由于您只是想计算符合我所见标准的工作站数量:
SELECT COUNT(*) AS Workstations FROM MyWorkStationTable WHERE Type = 1 AND SubType IN (1, 2, 3)
此外,IN 子句本质上已经是 OR。它既不是有效的语法,也没有必要说明它。
如果您只是对记录进行计数,最好的办法是使用 SQL Server 提供的 COUNT 函数。考虑使用以下内容:
SELECT COUNT(*) FROM [Table] WHERE TYPE = 1
AND (SUBTYPE = 1
OR SUBTYPE = 2
OR SUBTYPE = 3)
最好避免使用“IN”,因为它会导致对 SQL 引擎的不必要调用。
SELECT COUNT(*) [Workstations] FROM [YourTable] t WHERE t.Type = 1 AND t.SubType IN (1, 2, 3)
尝试避免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 次!