我有一个总是返回多行的表,我在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行。
答案 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