2014-04-11 30 views
0

實施例表由
T-SQL選擇查詢的行號,因爲它們是沒有WHERE子句

select 
    ROW_NUMBER() over (order by color) as row, 
    color 
from color_table 

輸出產生:

row color 
---------- 
1 black 
2 blue 
3 cyan 
4 yellow 

然後我想使用例如排除某些行。 WHERE color<>"blue"但行應保持不變。

結果表應該是

row color 
--------- 
1 black 
3 cyan 
4 yellow 

如何寫這個查詢?表是相當大的,所以查詢應該是有效的。

回答

1

將其包裝在子查詢中並過濾掉外部結果。

SELECT * 
FROM (select ROW_NUMBER() over (order by color) as row, color from color_table) a 
WHERE color != 'blue' 
+0

我的真實查詢比較複雜,表格有50k +行,它會有多高效? – user3522724

2

您可以使用CTE來簡化邏輯。

;WITH Numbered_clor_table 
AS 
(
    select ROW_NUMBER() over (order by color) as row, color from color_table 
) 
SELECT * 
FROM Numbered_clor_table 
WHERE color != 'blue'