2012-07-16 112 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引擎的不必要的調用。