在SQL Server中使用ORDER BY仅从第2行开始

时间:2015-10-13 03:37:47

标签: sql-server tsql sql-order-by

我有一个总是返回多行的表,我在VB.NET的组合框中使用这些行作为值。在这些行中,第1行是设置为默认值的数据。现在,其余行必须按字母顺序排序,以便于阅读。我现在正在尝试使用 public static void RegisterTypes(IUnityContainer container) { container .RegisterType<IDataContextAsync, DB1Context>("DB1Context", new PerRequestLifetimeManager()) //.RegisterType<IDataContextAsync, DB2Context>("DB2Context", new PerRequestLifetimeManager()) .RegisterType<IRepositoryProvider, RepositoryProvider>( new PerRequestLifetimeManager(), new InjectionConstructor(new object[] {new RepositoryFactories()}) ) . . . . } ,有没有简洁的方法让我这样做。

以此结构为基础。

ROW_NUMBER()

存在这些数据

tbl_Sample
col_ID - int
col_description - varchar(30)

我希望有一个返回类似

的查询
col_ID  |  col_description
--------------------------
1       |  Default_Value
2       |  a_value2
3       |  a_value2
4       |  a_value5
5       |  a_value1
6       |  a_value3

至于查询,正如我所说,我正在测试ROW_NUMBER()以及OVER和ORDER BY,因为按col_ID | col_description -------------------------- 1 | Default_Value 5 | a_value1 2 | a_value2 3 | a_value2 6 | a_value3 4 | a_value5 排序它将不起作用,因为按字母顺序排列描述会改变col_description的行号必须保留在第1行。

3 个答案:

答案 0 :(得分:2)

row_number() over(order by case when col_description = 'Default_Value' then 0 else 1 end ASC, col_description ASC)

答案 1 :(得分:1)

实际上,我认为没有理由在这里使用row_number()。您可以直接使用case子句中的order by

SELECT col_ID, col_description
FROM tbl_Sample
ORDER BY CASE WHEN col_description = 'Default_Value' THEN 0 ELSE 1 END, col_description

答案 2 :(得分:0)

如果您想使用PARTITION BY进行GROUP BY列,请执行以下操作:

SELECT *, ROW_NUMBER()
OVER(PARTITION BY col_description ORDER BY CASE WHEN col_description = 'Default_Value' THEN 0 ELSE 1 END ASC, col_description ASC) AS RN
FROM tbl_Sample