T-SQL选择查询行号,因为它们没有WHERE子句

时间:2014-04-11 08:39:15

标签: sql sql-server row-number

生成的示例表
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

如何编写此查询?表格相当大,因此查询应该是有效的。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

将其包装在子查询中并将结果过滤到外面。

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