2012-07-16 115 views
-1

我的查询是像below.I要选择值如果TYPE = 1和亚型= 1,3或2在SQL Server中使用IN子句

select sum(case when Type = 1 and SubType in (1, 3 or 2) then 1 else 0 end) as 'WorkStations' 

这是正确的方式?

回答

1

既然你只是想获得符合标准的,据我可以看到工作站的计数:

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

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

+0

谢谢Jamie.I想要得到这个。工作站[#] - 通过计数用子类型工作站,平板电脑或笔记本电脑设置的硬件资产进行标识 – Indra 2012-07-16 16:43:08

+1

应该优先使用“select count(PrimaryKeycolumn)”。 – 2012-07-16 16:50:56

+0

@RGI好点。由于我不知道表格模式,为了避免可能的混淆,我提供了*。 – JamieSee 2012-07-16 16:58:24

0
SELECT COUNT(*) [Workstations] FROM [YourTable] t WHERE t.Type = 1 AND t.SubType IN (1, 2, 3) 
0

尽量避免IN谓词,而是使用加入,因为它尽管一个事实,即只有一个/两个赛不必要的迭代。我会用一个例子来解释它。

假设我有两个列表对象。

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

使用IN,它会搜索每个列表-1列表-2这意味着迭代会发生49倍

1

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

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

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